Trigraph字符

时间:2012-11-28 07:36:48

标签: c trigraphs

c99 standard  5.2.1.1 Trigraph sequences

2示例以下源代码行

printf("Eh???/n");

变为(在替换三字符序列之后?? /)

printf("Eh?\n");

它说它将取代三字符序列,但事实并非如此。

正在打印"Eh???/n"

我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

默认情况下,在gcc中禁用Trigraph。如果您正在使用gcc,则使用-trigraphs进行编译以启用trigraphs:

gcc -trigraphs source.c

答案 1 :(得分:1)

printf中的??/是一个Trigraph字符,它是C预处理器的一部分。

如果使用gcc -trigraphs source.c启用三字组合,它将把??/转换为\。您的代码将如下所示:

printf("Eh???/n"); // Before enable trigraph

printf("Eh?\n"); // After enable trigraph

您可以访问https://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C以获得更多信息。

可能的What does the C ??!??! operator do?副本