error: initializer element is not constant
const int BIT = 12;const int BITon = 0x1<<BIT;
错误提示 "error: initializer element is not constant"?
这么简单为啥给我错啦,咋了? 这个错很常见,const int 在 C 里不是编译期常量,改成 #define BIT 12 试试? 你可以用 enum 代替 const int,比如 enum { BIT = 12, BITon = 0x1 << BIT };,这样就不会报错了。 0x1 << BIT 需要在编译期求值,但 const int 在 C 里不属于真正的编译期常量,所以会报错。 你用的是 GCC 还是别的编译器?有些编译器可能允许 const int 作为编译期常量,但标准 C 里是不行的。 这个问题可以用 #define BITon (0x1 << BIT) 解决,因为 #define 宏展开时是在预处理阶段完成的。 你用的是 C 还是 C++?如果是 C++,const int 可以作为编译期常量,但在 C 里就不行了。 如果你用的是 C++,加上 constexpr 试试:constexpr int BIT = 12; constexpr int BITon = 0x1 << BIT;。 C 语言里要想用 const int 作为编译期常量,你得改成 #define 或者 enum,否则就得在运行时赋值。 C 语言里 const int 只是“只读变量”,不是真正的编译期常量,不能用于 static 或 const 初始化。 你试试看 static const int BIT = 12; 这样声明,它在某些编译器里可能就能用了,不过还是建议 #define。
页:
[1]