我有以下代码:
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/