SocialButterfly 发表于 2025-3-14 10:00

error: initializer element is not constant

const int BIT = 12;
const int BITon = 0x1<<BIT;
错误提示 "error: initializer element is not constant"?

这么简单为啥给我错啦,咋了?

公羊子丹 发表于 2025-3-15 07:49

这个错很常见,const int 在 C 里不是编译期常量,改成 #define BIT 12 试试?

周半梅 发表于 2025-3-15 07:50

你可以用 enum 代替 const int,比如 enum { BIT = 12, BITon = 0x1 << BIT };,这样就不会报错了。

Wordsworth 发表于 2025-3-15 07:52

0x1 << BIT 需要在编译期求值,但 const int 在 C 里不属于真正的编译期常量,所以会报错。

Bblythe 发表于 2025-3-15 07:53

你用的是 GCC 还是别的编译器?有些编译器可能允许 const int 作为编译期常量,但标准 C 里是不行的。

Pulitzer 发表于 2025-3-15 07:54

这个问题可以用 #define BITon (0x1 << BIT) 解决,因为 #define 宏展开时是在预处理阶段完成的。

帛灿灿 发表于 2025-3-15 07:55

你用的是 C 还是 C++?如果是 C++,const int 可以作为编译期常量,但在 C 里就不行了。

Uriah 发表于 2025-3-15 07:56

如果你用的是 C++,加上 constexpr 试试:constexpr int BIT = 12; constexpr int BITon = 0x1 << BIT;。

Clyde011 发表于 2025-3-15 07:58

C 语言里要想用 const int 作为编译期常量,你得改成 #define 或者 enum,否则就得在运行时赋值。

童雨竹 发表于 2025-3-15 07:59

C 语言里 const int 只是“只读变量”,不是真正的编译期常量,不能用于 static 或 const 初始化。

万图 发表于 2025-3-15 08:00

你试试看 static const int BIT = 12; 这样声明,它在某些编译器里可能就能用了,不过还是建议 #define。
页: [1]
查看完整版本: error: initializer element is not constant