1
1
“为什么(关于C的某些东西)是这样的呢?”问题通常不能得到回答,因为没有一个编写1989年C标准的人在这里回答问题(据我所知,无论如何),如果他们 但是,我可以想到一个合理的原因,为什么跳过的条件组的内容需要由一个有效的预处理令牌序列组成。注意评论是 不
还要注意的是,扫描评论的结尾非常简单。
相比之下,扫描跳过的条件组的结尾并不简单,因为条件组嵌套。你一定在找
默认情况下,GCC仅在跳过的条件组中遇到不可标记的行时发出警告,在其他位置出现错误:
这是有意的宽大处理,可能是我自我介绍的(只是
自从我写了GCC当前预处理器的三分之一之后,已经有好几年了,但是我仍然忘记了很多细节)。你看,那个
起初的
做
评论
之间
1 如果你已经长大了,知道为什么RMS觉得这个名字很有趣,请举手。 |
2
2
在
translation phase 3
其中
这个 gcc document you cite 基本上是这么说的:
|
3
1
描述 翻译阶段3 (C11 5.1.1.2/3),在执行预处理指令之前发生:
预处理令牌 是:
请特别注意 串文字 是单个预处理令牌。随后的描述(C11 6.4/3)阐明:
因此,您的第二个代码在翻译阶段3会导致未定义的行为。 |