【发布时间】:2020-06-08 06:23:25
【问题描述】:
出于某种难以理解的原因,在我的代码中我有类似的内容:
#define pippo(x) printf("%d",x)
...
... many lines down in the code
...
int pippo = 0;
相同的标识符pippo 已用于类似函数的宏和变量名!除了这可能在糟糕的维护者中引起的混乱之外,我想知道这是否符合标准。
C99 和 C11(在 6.10.3 中)都说:
10 [...] 类似函数的宏名称的每个后续实例后跟一个 ( 因为下一个预处理标记引入了 预处理被替换列表替换的令牌 定义 [...]
他们没有说明如果类似函数的宏名称 not 后跟一个 '(' 会发生什么,我担心某些编译器可能会认为这是一个错误(或者可能只是发出警告)。
我是不是太担心了?
【问题讨论】:
-
如果它编译,你为什么担心?但修复肯定更好。
-
好新词,即:“难以理解!” (我会投票让你成为名誉格拉斯哥人。)
-
@EugeneSh.:即使某些东西可以编译,也会有人担心,因为存在不会阻止编译的错误,而且某些东西可能在一个编译器中编译,而不是在另一个编译器中编译。
标签: c c-preprocessor