c - GCC __builtin_constant_p 总是返回 0

标签 c gcc

我有以下代码:

const int a = 10;
int b = __builtin_constant_p(a);
printf("%d\n", b);

输出为 0。 我看过那个人,0 的值并不意味着 不是编译时间常量,只是 gcc 无法证明它是。无论如何,我可以让这个输出为 1 吗?

最佳答案

const 限定的变量不是 C 中的常量表达式,但 GCC 没有将 __builtin_constant_p 记录为确定参数是否为无论如何都是不断的表达。相反,它是 documented “确定一个值在编译时是否已知为常量,因此 GCC 可以对涉及该值的表达式执行常量折叠”。所以它应该可以用于您想要的。

问题几乎可以肯定只是你用 -O0(没有优化,默认)编译,在这种情况下,不会发生常量折叠,因为你关闭了它。打开优化(至少 -O1,但通常你需要 -O2-Os),它应该会做你想做的事。

关于c - GCC __builtin_constant_p 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794096/

相关文章:

c++ - 为什么 __builtin_prefetch 在这里没有任何作用?

c - Arduino Serial.readBytes() 不兼容类型

c - pthread 不等待互斥锁 threadFinished

java - 网络编程中Java函数与C函数的等价

C:为什么用 %s 打印空字符会打印 "(null)"?

ios - 结构填充编译标志

堆栈帧上缺少注入(inject)字符串的某些部分

c - 如何解决 "undefined reference to function"错误?

c - 作为值提供给 CFReadStreamSetProperty() 的对象的生命周期

c - 这段代码中的段错误?