这是有可能得到在编译时枚举成员的值?

Jac*_*ack 7 c enums gcc c-preprocessor

这是有可能得到在编译时枚举成员的值?

事实上,我希望能够做到这样的事情:

enum { 
   FOO_FIRST = -1,
   FOO_A,
   FOO_B,
   FOO_C,
   FOO_LAST
};

#if FOO_LAST > 10
//...
#else
//..
#endif
Run Code Online (Sandbox Code Playgroud)

我知道cpp不知道变量,错误的语法等; 只有以#(右)开头的东西?但是枚举的成员具有固定大小,并且不能像10(常数整数)值那样进行更改,并且编译器知道其大小和值.所以,没有任何可能做这样的比较(如上所述)?gcc-extensions也非常受欢迎.

它只是尝试不使用#defines 重写我的所有枚举,并且不花时间做一些宏更改.

Nik*_* C. 7

只是用if.枚举可以在编译时进行评估.编译器将优化不可能的分支:

if (FOO_LAST > 10) {
    // A
} else {
    // B
}
Run Code Online (Sandbox Code Playgroud)

编译器知道无法到达两个分支(A和B)中的哪一个,因此它可以if完全消除.

但请注意,您应该只直接使用枚举器.例如,在这:

int num = FOO_LAST;
if (num > 10) {
    // A
} else {
    // B
}
Run Code Online (Sandbox Code Playgroud)

GCC将保持if比较.