c語言中的三字母詞(trigraph)
在ansi c标準中,定義了9個三字母詞(trigraph),三字母詞就是幾個字元的序列,合起來表示另一個字元。三字母詞使c語言環境可以在缺少一些必需字元的字元集(比如,一些非常老式的鍵盤上沒有[]{}#\^~|)上實作。也許是由于這些字元集我們基本上用不到,是以在大多數c語言的書籍中,我們都看不到對三字母詞的講解。下圖列出了9個三字母詞以及它們所代表的的字元。
源代碼中的“三字母詞”,在編譯階段會被替換為“對應的字元”。對于以“?”開頭的字元序列,如果不能與上面9個比對,編譯器将保持原狀;一旦比對,編譯器就會做替換。 下面是我們很容易犯的一個錯誤(摘自《c和指針》):
1
2
3
4
5
6
<code>#include <stdio.h></code>
<code>int</code>
<code>main(</code><code>int</code>
<code>argc,</code><code>char</code>
<code>**argv)</code>
<code>{</code>
<code>printf</code><code>(</code><code>"delete file (are you really sure??):"</code><code>);</code>
<code>}</code>
<code>main.c|5|warning: trigraph ??) ignored, use -trigraphs to enable [-wtrigraphs]|</code>

添加編譯選項後
注意:由于編譯器的種類各樣,對ansi c的支援也不一樣,是以可能會有些c編譯器不處理“三字母詞”,會将它們當做普通的字元串來處理。 以上測試是在vc++ 6.0下進行的,對于gcc編譯器,需要在編譯的時候添加選擇"-ansi"或者"-trigraphs"。