可以在编译时获取枚举成员的值吗?
事实上,我希望能够做到这样的事情:
enum {
FOO_FIRST = -1,
FOO_A,
FOO_B,
FOO_C,
FOO_LAST
};
#if FOO_LAST > 10
//...
#else
//..
#endif
我知道cpp
不知道变量,语法错误等;只有以#
(右)开头的东西?但是枚举的成员具有固定大小,并且不能像10(常数整数)值那样进行更改,并且编译器知道其大小和值。所以,没有任何可能做这样的比较(如上所述)? gcc-extensions也非常受欢迎。
这只是尝试不使用#define
重写所有枚举,并且不花时间做一些宏更改。
答案 0 :(得分:7)
只需使用if
即可。枚举可以在编译时进行评估。编译器将优化不可能的分支:
if (FOO_LAST > 10) {
// A
} else {
// B
}
编译器知道无法到达两个分支(A和B)中的哪一个,因此它可以完全消除if
。
但请注意,您应该只直接使用枚举器。例如,在此:
int num = FOO_LAST;
if (num > 10) {
// A
} else {
// B
}
GCC将保持 if
比较。
答案 1 :(得分:3)
#ifdef
由预处理器解释,而不是由编译器解释。预处理器对enums
的值一无所知。所以这不是一种方法。