【回炉重造#1】C语言:三字母词(trigraph)

要说为什么今天会想到这个问题,还要说复习的时候遇到的事情。

我复习到C语言的转义序列的时候发现了一个有意思的地方——?

这个转义序列的含义是问号。

可是有什么用呢?为什么要这么做?平时打个问号都是正常输出的啊?

我查了一下发现和三字母词有关。

原来一些老的键盘还有一些国家的键盘上没有一些符号,比如表示函数块的花括号等等。

于是有了三字母词,用来表示一些常用的但一些特殊的键盘上没有的符号。

三字母词 含义
??= #
??( [
??/ /
??) ]
??' ^
??< {
??! |
??> }
??- ~

由于连用两个问号的情况比较少,所以三字母词用的是两个问号开头,这样避免出现理解错误。

因此C语言的转义序列里有一个?的转义序列,当需要输出多个问号时,与三字母词序列的冲突就可以解决了。

这些东西真的有用吗?

我简单试了一下,发现并没有什么用……

编译器并没有把这个当做特殊情况来看待,反而当成了普通字符串输出。

怎么回事呢?我查阅网上资料之后了解了原因。

三字母词其实很少用到,所以一些编译器不处理三字母词,但是如果是与别人合作的话就要注意了,如果一人支持三字母词,另一人不支持三字母词,两人合作很容易出问题。

也正是因为三字母词很少用到,所以大部分C语言教程不会提到这部分内容。

如果想让C编译器处理三字母词,就需要在编译时添加“-ansi”或者“-trigraphs”就可以了。

 话说,这个知识点真的有用吗?知道就行了吧。

 

 

 

原文地址:https://www.cnblogs.com/Coder-42/p/13259427.html