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 重写我的所有枚举,并且不花时间做一些宏更改.
只是用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比较.