打印
[AI]

error: initializer element is not constant

[复制链接]
107|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 里不属于真正的编译期常量,所以会报错。

使用特权

评论回复
5
Bblythe| | 2025-3-15 07:53 | 只看该作者
你用的是 GCC 还是别的编译器?有些编译器可能允许 const int 作为编译期常量,但标准 C 里是不行的。

使用特权

评论回复
6
Pulitzer| | 2025-3-15 07:54 | 只看该作者
这个问题可以用 #define BITon (0x1 << BIT) 解决,因为 #define 宏展开时是在预处理阶段完成的。

使用特权

评论回复
7
帛灿灿| | 2025-3-15 07:55 | 只看该作者
你用的是 C 还是 C++?如果是 C++,const int 可以作为编译期常量,但在 C 里就不行了。

使用特权

评论回复
8
Uriah| | 2025-3-15 07:56 | 只看该作者
如果你用的是 C++,加上 constexpr 试试:constexpr int BIT = 12; constexpr int BITon = 0x1 << BIT;。

使用特权

评论回复
9
Clyde011| | 2025-3-15 07:58 | 只看该作者
C 语言里要想用 const int 作为编译期常量,你得改成 #define 或者 enum,否则就得在运行时赋值。

使用特权

评论回复
10
童雨竹| | 2025-3-15 07:59 | 只看该作者
C 语言里 const int 只是“只读变量”,不是真正的编译期常量,不能用于 static 或 const 初始化。

使用特权

评论回复
11
万图| | 2025-3-15 08:00 | 只看该作者
你试试看 static const int BIT = 12; 这样声明,它在某些编译器里可能就能用了,不过还是建议 #define。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝