[AI] error: initializer element is not constant

[复制链接]
 楼主| SocialButterfly 发表于 2025-3-14 10:00 | 显示全部楼层 |阅读模式
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。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部