Seperti yang sudah dinyatakan ??!??!
pada dasarnya adalah dua trigraph ( ??!
dan ??!
lagi) disatukan yang diganti-diterjemahkan menjadi ||
, yaitu logika OR , oleh preprocessor.
Tabel berikut ini berisi setiap trigraph akan membantu menyatukan kombinasi trigraph alternatif:
Trigraph Replaces
??( [
??) ]
??< {
??> }
??/ \
??' ^
??= #
??! |
??- ~
Sumber: C: A Reference Manual Edisi ke-5
Jadi sebuah trigraph yang kelihatannya ??(??)
pada akhirnya akan dipetakan ke []
, ??(??)??(??)
akan digantikan oleh [][]
dan seterusnya, Anda mendapatkan idenya.
Karena trigraph diganti selama preprocessing, Anda dapat menggunakan cpp
untuk melihat sendiri hasilnya, menggunakan trigr.c
program konyol :
void main(){ const char *s = "??!??!"; }
dan memprosesnya dengan:
cpp -trigraphs trigr.c
Anda akan mendapatkan output konsol sebesar
void main(){ const char *s = "||"; }
Seperti yang dapat Anda perhatikan, opsi -trigraphs
harus ditentukan atau yang lain cpp
akan mengeluarkan peringatan; ini menunjukkan caranya trigraph adalah sesuatu dari masa lalu dan tidak memiliki nilai modern selain membingungkan orang yang mungkin menabrak mereka .
Adapun alasan di balik pengenalan trigraph, lebih baik dipahami ketika melihat bagian sejarah ISO / IEC 646 :
ISO / IEC 646 dan pendahulunya ASCII (ANSI X3.4) sebagian besar mendukung praktik yang ada mengenai pengkodean karakter dalam industri telekomunikasi.
Karena ASCII tidak menyediakan sejumlah karakter yang diperlukan untuk bahasa selain bahasa Inggris, sejumlah varian nasional dibuat yang menggantikan beberapa karakter yang kurang digunakan dengan yang dibutuhkan .
(penekanan milikku)
Jadi, pada dasarnya, beberapa karakter yang diperlukan (yang ada trigraph ada) diganti dalam varian nasional tertentu. Ini mengarah pada representasi alternatif menggunakan trigraph yang terdiri dari karakter yang masih dimiliki oleh varian lain.
!ErrorHasOccurred() ??!???! HandleError();
untuk mengkompilasi? Itu??!
???
!
. Buktikan intinya?