gcc 不喜欢下面的代码:
inline const plus(unsigned x,unsigned y) __attribute__((pure));
inline const plus(unsigned x,unsigned y) { return x+y; }
int arr[plus(1,1)];
它抛出以下错误:
error: variably modified ‘arr’ at file scope
唯一的问题是,我已尽我所能告诉 gcc 它可以将对 plus(a,b) 的调用优化为“a+b”,并且我只传递了常量,所以结果 应该保持不变!
我是否遗漏了一些东西来完成这项工作?还是 gcc 没有那么聪明?
顺便说一下,使用 plus(1,1) 而不是 1+1 的原因是它使用宏可以更通用地构建数组大小。
最佳答案
可能有 gcc 扩展允许这样的事情,但至少在标准 C 中,函数调用永远不会被视为常量表达式,无论您添加多少 const
,或者它有多常量真的是。您可能必须改用宏:
#define plus(x, y) ((x)+(y))
关于c - 如何让 gcc 将包含函数调用的表达式识别为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593212/