【发布时间】:2016-11-25 11:42:34
【问题描述】:
我正在测试相同代码的两个版本(在 Linux 上使用 GCC 版本 4.9.2,无参数)。
两者都有一个#define 指令,后面跟着一个#ifdef/#endif 对。
现在,事实证明,只有在初始 #define 之后的标签以下划线开头时,该组合才能正常工作。没有下划线,它会以一种非常奇怪的方式工作......只有每三次。
换句话说,这是可行的
#define _whatever
虽然不是这样:
#define whatever
尽管我知道如何使指令起作用,但只是好奇——这种行为是否符合任何标准?
编辑: 按照下面的要求,这里有两个绝对真实的例子。 这一个打印“预处理器工作”行:
#define _whatever
#include <stdio.h>
void main()
{
#ifdef _whatever
printf("Preprocessor works \n");
#endif
}
...这个不输出任何东西:
#define whatever
#include <stdio.h>
void main()
{
#ifdef whatever
printf("Preprocessor works \n");
#endif
}
是的,我什至在字面上使用“随便”这个词——我不认为,它是在其他任何地方定义的。但同样,使标签起作用的是下划线。
【问题讨论】:
-
您没有显示代码中有效或停止工作的部分。
-
好,实例:
-
这两个例子都可以正常工作。
-
@Lundin:他们应该这样做。只是不是在我非常具体的情况下....
标签: c gcc c-preprocessor