题
当我以非常简单的方式编写以下几行时,我发现了一个奇怪的输出:
代码:
printf("LOL??!\n");
printf("LOL!!?\n");
输出:
即使代码是在 MBCS 和 UNICODE 下编译的,也会发生这种情况。
输出在“?”的序列上有所不同。和 ”!”...
任何想法?
解决方案
你可以尝试
printf( "What?\?!\n" );
在计算机编程中,二字母和三字母分别是两个和三个字符的序列,它们被编程语言解释为一个字符。
某些编译器支持关闭三字母识别的选项,或者默认禁用三字母并需要一个选项来打开它们。有些在源文件中遇到三字母组时可能会发出警告。Borland 提供了一个单独的程序,即 trigraph 预处理器,仅在需要进行 trigraph 处理时才使用。
其他提示
??!
是三字母即得到由|
取代。
作为一项规则,你不应该在任何地方放置两个问号字符一起在一个源文件。
他们叫 三字母序列
??!
是垂直条的三字母序列 |
.
C/C++ 预处理器识别三字母并用其等效字符替换它们。
因此,当编译器看到您的代码时,三字母组已经被替换。
# grepping in the source file:
$ grep printf a.c
printf("foo: ??!");
# grepping the preprocessor output:
$ gcc a.c -trigraphs -E | grep printf | grep foo
printf("foo: |");
在??!被称为三字符和替换|输出。检查此链接
有在具有特殊意义的字符串常量字符的特殊序列。叫他们最初实现,因为不是所有的终端所支持的某些字符三字符。
不隶属于 StackOverflow