天天看點

C語言中的三字母詞

c語言中的三字母詞(trigraph)

在ansi c标準中,定義了9個三字母詞(trigraph),三字母詞就是幾個字元的序列,合起來表示另一個字元。三字母詞使c語言環境可以在缺少一些必需字元的字元集(比如,一些非常老式的鍵盤上沒有[]{}#\^~|)上實作。也許是由于這些字元集我們基本上用不到,是以在大多數c語言的書籍中,我們都看不到對三字母詞的講解。下圖列出了9個三字母詞以及它們所代表的的字元。

源代碼中的“三字母詞”,在編譯階段會被替換為“對應的字元”。對于以“?”開頭的字元序列,如果不能與上面9個比對,編譯器将保持原狀;一旦比對,編譯器就會做替換。 下面是我們很容易犯的一個錯誤(摘自《c和指針》):

1

2

3

4

5

6

<code>#include &lt;stdio.h&gt;</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>

C語言中的三字母詞

添加編譯選項後

C語言中的三字母詞
C語言中的三字母詞

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