Zaten belirtildiği gibi ??!??!
, esasen iki üç karakterli ( ??!
ve ??!
yine) için değiştirilir tercüme olsun bir araya mushed ||
yani mantıksal VEYA önişlemci tarafından,.
Her trigrafı içeren aşağıdaki tablo, alternatif trigraf kombinasyonlarını netleştirmeye yardımcı olmalıdır:
Trigraph Replaces
??( [
??) ]
??< {
??> }
??/ \
??' ^
??= #
??! |
??- ~
Kaynak: C: Bir Referans Kılavuzu 5. Baskı
Gibi görünüyor ki TriGraph ™ mod seçimini Yani ??(??)
nihayetinde için eşler []
, ??(??)??(??)
yerini alacak [][]
ve böylece, anladınız.
Ön işleme sırasında trigraflar değiştirildiğinden cpp
, aptal bir trigr.c
program kullanarak çıktıyı kendiniz görmek için kullanabilirsiniz :
void main(){ const char *s = "??!??!"; }
ve aşağıdakilerle işlenmesi:
cpp -trigraphs trigr.c
Konsol çıktısı alırsınız
void main(){ const char *s = "||"; }
Fark edebileceğiniz gibi, seçenek -trigraphs
belirtilmelidir, aksi cpp
takdirde bir uyarı verilir; bu, trigrafların nasıl geçmişte kaldığını ve bunlarla karşılaşabilecek insanları şaşırtmaktan başka modern bir değeri olmadığını gösterir .
Trigrafların getirilmesinin arkasındaki mantığa gelince , ISO / IEC 646'nın tarih bölümüne bakıldığında daha iyi anlaşılır :
ISO / IEC 646 ve selefi ASCII (ANSI X3.4) telekomünikasyon endüstrisindeki karakter kodlamaları ile ilgili mevcut uygulamaları büyük ölçüde onayladı.
ASCII, İngilizce dışındaki diller için gereken bir dizi karakter sağlamadığından, daha az kullanılan bazı karakterleri gerekli olanlarla değiştiren bir dizi ulusal varyant yapılmıştır .
(benimkini vurgula)
Bu nedenle, bazı ulusal değişkenlerde gerekli olan bazı karakterler (bir trigrafın olduğu karakterler) değiştirildi. Bu, diğer varyantların hala sahip olduğu karakterlerden oluşan trigrafları kullanarak alternatif temsile yol açar.
!ErrorHasOccurred() ??!???! HandleError();
derlemeyi umuyorsunuz ? İşte??!
???
!
. Ne demek oluyor?