当我以非常简单的方式编写以下几行时,我发现了一个奇怪的输出:

代码:

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

输出:alt text

即使代码是在 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: |");

在??!被称为三字符和替换|输出。检查此链接

有在具有特殊意义的字符串常量字符的特殊序列。叫他们最初实现,因为不是所有的终端所支持的某些字符三字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top