Trigraf
Kumpulan karakter sumber dari program sumber C terdapat dalam kumpulan karakter ASCII 7-bit, tetapi merupakan superset dari Kumpulan Kode Invarian ISO 646-1983. Barisan Trigraf memungkinkan program C untuk ditulis hanya dengan menggunakan Kumpulan Kode Invarian ISO (Organisasi Standar Internasional). Trigraf adalah barisan tiga karakter (diperkenalkan oleh dua tanda tanya berurutan) yang diganti oleh kompilator dengan karakter tanda baca yang sesuai. Anda dapat menggunakan trigraf di file sumber C dengan kumpulan karakter yang tidak berisi representasi grafis yang sesuai untuk beberapa karakter tanda baca.
C++17 menghapus trigraf dari bahasa. Implementasi dapat terus mendukung trigraf sebagai bagian dari pemetaan yang ditentukan implementasi dari file sumber fisik ke kumpulan karakter sumber dasar, meskipun standar mendorong implementasi untuk tidak melakukannya. Melalui C++14, trigraf didukung seperti pada C.
Visual C++ terus mendukung substitusi trigraf, namun dinonaktifkan secara default. Untuk informasi tentang cara mengaktifkan substitusi trigraf, lihat /Zc:trigraphs
(Substitusi Trigraf).
Tabel berikut menunjukkan sembilan barisan trigraf. Semua kemunculan dalam file sumber karakter tanda baca di kolom pertama digantikan dengan karakter yang sesuai di kolom kedua.
Barisan Trigraf
Trigraf | Karakter Tanda Baca |
---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
??< |
{ |
??! |
| |
??> |
} |
??- |
~ |
Trigraf selalu diperlakukan sebagai karakter sumber tunggal. Penerjemahan trigraf terjadi pada fase penerjemahan pertama, sebelum pengenalan karakter escape dalam literal string dan konstanta karakter. Hanya sembilan trigraf yang ditunjukkan pada tabel di atas yang dikenali. Semua baris karakter lainnya tidak diterjemahkan.
Barisan karakter escape, \?
, mencegah kesalahan penafsiran barisan karakter yang menyerupai trigraf. (Untuk informasi tentang barisan escape, lihat Barisan Escape.) Misalnya, jika Anda mencoba untuk mencetak string What??!
dengan pernyataan printf
ini
printf( "What??!\n" );
String yang dicetak adalah What|
karena ??!
merupakan barisan trigraf yang diganti dengan karakter |
. Tulis pernyataan sebagai berikut untuk mencetak string dengan benar:
printf( "What?\?!\n" );
Dalam pernyataan printf
ini, karakter escape garis miring terbalik di depan tanda tanya kedua mencegah kesalahan penafsiran ??!
sebagai trigraf.