C预处理器和枚举 - 我的代码出错?

时间:2012-12-16 23:26:13

标签: c enums c-preprocessor

我在全局标头中有以下代码,因此我可以在编译时做出决定:

enum {
    MyStyleA,
    MyStyleB,
    MyStyleC
};

#define STYLE MyStyleB

在各种源文件中,我包含此标题并执行以下操作:

#if STYLE == MyStyleC
    doSomething();
#endif

问题是,即使我在标题中将doSomething()定义为STYLEMyStyleB肯定会被执行!

知道这里出了什么问题吗?

(我承认我不是 C 预处理专家。)

2 个答案:

答案 0 :(得分:2)

我的床头柜上没有C标准的副本,所以我错了,但是:

预处理器不知道MyStyleC是什么 - 在它到达编译器之前没有得到值。

编译器通常有一个选项(以前是-e?)来输出预处理器阶段的结果(作为文本) - 我会看一下,看看预处理器之后你的#if是什么样的过去了。

答案 1 :(得分:1)

预处理器不了解代码的语义,它只进行文字宏替换,因此它只能用于常量表达式。写作怎么样

if (STYLE == MyStyleC) {
    doSomething();
}

代替?