《C编程.C以后》2.C Trigraph

Trigraphs 

C是用英语设计的,并采用通用的英文字符集,其中包括{,},[,]等字符。然而,其他一些语言没有C所要求的这些或其他字符。为了解决这个问题,第5.2.1.1节中的1989 C标准定义了一组三字符序列,它们可以代替符号,并且可以使用在任何情况下。实际上,1989 C标准(第5.1.1.2节)中规定的编译的第一个翻译阶段是用它们相应的单字符等价物替换三字符序列。

存在以下三元组序列,而不存在其他三元组序列。每个问号?不会开始列出的三字母序列之一不会改变。

序列替换
======== ===========
  ?? =#
  ??([
  ?? / \
  ??)]
  ??” ^
  ?? <{
  ??!|
  ??>}
  ??  - 〜

这样的结果就是诸如此类的陈述

printf  (“Eh ??? / n” );

在三角形被替换之后,它将等同于

printf  (“Eh?\ n ” );

如果程序员想要替换三字符,在字符串和字符常量中(这是他们需要替换的唯一地方,它会改变一些东西),程序员可以简单地逃避第二个问号; 例如

 printf  (“连续两个问号:?\?!\ n ” );

1999 C标准在6.4.6节中增加了这些标点符号,有时称为有向图。除了拼写之外,它们等同于以下标记:

有向图的等价
======= ==========
   <:[
   :>]
   <%{
   %>}
   %:#
  %:%:##

换句话说,当作为宏替换的一部分进行字符串化时,它们的行为会有所不同,但在其他方面是等效的。

猜你想读:《C编程.C以后》3.语言重载和扩展

THE END
分享