代码之家  ›  专栏  ›  技术社区  ›  wengseng

打印??还有!!在不同的序列中会显示不同的输出

  •  5
  • wengseng  · 技术社区  · 15 年前

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

    代码:

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

    alt text

    甚至代码都是在MBCS和UNICODE下编译的。

    输出按“”的顺序变化还有“!”。。。

    你知道吗?

    5 回复  |  直到 10 年前
        1
  •  5
  •   stackfull    15 年前

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

    在计算机编程中,有向图和三向图分别是由两个和三个字符组成的序列,编程语言将它们解释为一个字符。

    一些编译器支持关闭三角图识别的选项,或者在默认情况下禁用三角图,并且需要一个打开它们的选项。有些人在源文件中遇到三角图时会发出警告。Borland提供了一个单独的程序,trigraph预处理器,仅在需要trigraph处理时使用。

        2
  •  16
  •   James McNellis    15 年前

    ??! 是一个 trigraph 被替换为 |

    通常,在源文件的任何位置都不应将两个问号字符放在一起。

        3
  •  5
  •   codaddict    15 年前

    它们被称为 Trigraph Sequences

    ??! 是垂直条的三角图序列 | .


    因此,当编译器看到您的代码时,三角图已经被替换。

    # 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: |");
    
        4
  •  4
  •   Sachin Shanbhag    15 年前

    这个??!被称为trigraph,并在输出中替换为|。看看这个 link

        5
  •  2
  •   Hogan    15 年前