当前位置: C语言 -- 专题 -- 三字符序列

三字符序列

三字符序列(trigraph sequences):在进行任何其它处理前,三字符序列会被替换为对应的单个字符。三字符序列以两个?字符开始,第三个字符决定三字符序列表示的符号。使用三字符序列能够输入未在ISO/IEC 646标准固定代码集(Invariant Code Set)中定义的字符(该固定代码集是7ASCII字符集的子集。)。ISO/IEC 9899:2018标准第5.2.1.1 Trigraph sequences节提供了9个三字符序列,具体如下:

三字符序列 表示字符 三字符序列 表示字符 三字符序列 表示字符
??= # ??) ] ??! |
??( [ ??' ^ ??> }
??/ \ ??< { ??- ~

三字符序列在c程序编译的第一阶段替换成对应的单字符,例如:

??=include <stdio.h>

将替换为

#include <stdio.h>

不是开始三字符序列的?字符在编译时不会发生这种替换,例如:

puts("???=");

将输出

?#


如果不希望三字符序列在编译时被替换成单字符,可以使用转义序列表示?字符,例如:

puts("?\?\?=");

将输出

???=


编译时三字符序列的替换先于转义序列的替换,例如:

puts("\\??=");

将输出

\#