c99 standard 5.2.1.1 Trigraph sequences
2示例以下源代码行
printf("Eh???/n");
变为(在替换三字符序列之后?? /)
printf("Eh?\n");
它说它将取代三字符序列,但事实并非如此。
正在打印"Eh???/n"
我错过了什么吗?
答案 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以获得更多信息。