Trigraflar
C kaynak programlarının kaynak karakter kümesi 7 bit ASCII karakter kümesi içinde yer alır, ancak ISO 646-1983 Sabit Kod Kümesi'nin bir üst kümesidir. Trigraf dizileri, C programlarının yalnızca ISO (Uluslararası Standartlar Enstitüsü) Sabit Kod Kümesi kullanarak yazılmasına izin verir. Trigraflar, derleyicinin karşılık gelen noktalama karakterleriyle değiştirdiği üç karakterli dizilerdir (birbirini izleyen iki soru işareti ile yazılır). Trigrafları, C kaynak dosyalarında bazı noktalama karakterleri için uygun grafik sunumlar içermeyen bir karakter kümesiyle kullanabilirsiniz.
C++17, trigrafları dilden kaldırır. Uygulamalar, fiziksel kaynak dosyadan temel kaynak karakter kümesine uygulama tanımlı eşlemenin bir parçası olarak trigrafları desteklemeye devam edebilir, ancak standart uygulamaları bunu yapmamaya teşvik eder. C++14 aracılığıyla trigraflar C'de olduğu gibi desteklenir.
Visual C++ trigraf değişimini desteklemeye devam eder, ancak varsayılan olarak devre dışı bırakılır. Trigraf değişimini etkinleştirme hakkında bilgi için bkz /Zc:trigraphs
. (Trigraf değişimi).
Aşağıdaki tablo, dokuz trigraf dizisini göstermektedir. Noktalama karakterlerinin kaynak dosyasında ilk sütunda görünen tüm örneklerinin yerine karşılık gelen karakterler ikinci sütuna konur.
Trigraf Dizileri
Trigraf | Noktalama Karakteri |
---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
??< |
{ |
??! |
| |
??> |
} |
??- |
~ |
Bir trigraf her zaman tek kaynaklı karakter olarak işlem görür. Trigrafların çevirisi, dize değişmez değerleri ve karakter sabitlerindeki kaçış karakterlerinin tanınmasından önce ilk çeviri aşamasında gerçekleşir. Yalnızca yukarıdaki tabloda gösterilen dokuz trigraf tanınır. Diğer tüm karakter dizileri çevrilmeden bırakılır.
karakter kaçış dizisi, \?
trigraf benzeri karakter dizilerinin yanlış yorumlanmasını önler. (Kaçış dizileri hakkında bilgi için bkz. Kaçış Dizileri.) Örneğin, dizeyi What??!
bu printf
deyimle yazdırmaya çalışırsanız
printf( "What??!\n" );
yazdırılan dizenin What|
nedeni ??!
, karakteriyle |
değiştirilen bir trigraf dizisi olmasıdır. Diziyi düzgün şekilde yazdırmak için ifadeyi aşağıdaki gibi yazın:
printf( "What?\?!\n" );
Bu printf
deyiminde, ikinci soru işaretinin önündeki bir ters eğik çizgi kaçış karakteri, ??!
öğesinin bir trigraf olarak yanlış yorumlanmasını önler.