共用方式為


三併詞

來源字元集 C 原始程式內含在 7 位元的 ASCII 字元集中,但是它是 ISO 646-1983 Invariant Code Set 的超集。 三併詞序列允許 C 程式只使用 ISO (國際標準組織) Invariant Code Set 撰寫。 三併詞是三個字元的序列 (由兩個連續的問號引入),編譯器會以其對應的標點符號字元取代該序列。 如果 C 原始程式檔所用的字元集不含某些標點符號字元的方便圖形表示,您可改為使用三併詞。

C++17 移除了語言中的三併詞。 實作可能會繼續支援三字,做為實體原始程式檔與 基本來源字元集之實作定義對應的一部分,但標準鼓勵實作不要這麼做。 直到 C++14,對三併詞的支援與在 C 中一樣。

Visual C++ 會繼續支援三字替代,但預設為停用。 如需如何啟用三字替代的資訊,請參閱/Zc:trigraphs (三字替代)

下表顯示九個三併詞序列。 在標點符號字元的原始程式檔中,所有出現在第一行的字元會以第二行中對應的字元取代。

三併詞序列

三併詞 標點符號字元
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~

三併詞永遠視為單一來源字元。 三併詞的轉譯會發生在第一個轉譯階段,接著再辦識字串常值和字元常數中的逸出字元。 其中只會辨認上述表格中顯示的九個三併詞。 其他字元序列會保留為未轉換狀態。

字元逸出序列 \? 可防止三字型字元序列的錯誤解譯。 (如需逸出序列的相關資訊,請參閱Escape Sequences.) 例如,如果您嘗試使用這個 printf 語句列印字串 What??!

printf( "What??!\n" );

印出字串會是 What|,因為 ??! 是使用 | 字元取代的三併詞序列。 依如下的陳述式撰寫,以正確列印字串:

printf( "What?\?!\n" );

在這個 printf 陳述式中,第二個問號前面的反斜線逸出字元會使 ??! 不會誤譯為三併詞。

另請參閱

/Zc:trigraphs (Trigraphs 替代)
C 識別碼