0%

C语言 鲜为人知的“三字母词”

C语言中鲜为人知的“三字母词”

在ANSI标准中,定义了“三字母词”,或者成为“三联符序列”,英文为”trigraph sequences“。目的主要是为了在一些特定的字符集中,比如一些七位代码集中,解决一些特定字符的输入问题。

也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对“三字母词”的讲解。这里资料来源于参考ANSI C99标准(即传说中的《American National Standards Institute for Programming Languages-C》 1999年,我们习惯简称为“C99”)。

截止到现在,“三字母词”有且仅有9个,分别为:

三字母词 对应的字符
??= #
??( [
??) ]
??< {
??> }
??/ \
??!
??’ ^
??- ~

就这9个,没有其他的三字母词。源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面9个匹配,编译器将保持原状;一旦匹配,编译器就会做替换。

编译时可能需要加上选项-trigraphs。输出为:

其中缺的那项为\。并且会在编译的时候报警:

1
warning: unknown escape sequence: ‘\040’ [enabled by default]

因为我们知道\后面需要跟上有意义的转义字符才可以,比如n为换行等。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道