c - 如何让 gcc 将包含函数调用的表达式识别为常量?

标签 c function gcc constants

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/

相关文章:

c++ - 为什么在通过 const 引用传递临时值时调用复制构造函数?

c - pthread 导致的段错误?

c - 我如何使用 Minizip(在 Zlib 上)?

c - 请使用 fork() 帮助解释此 C/linux 代码

Javascript setTimeout 在 for 循环中不起作用

function - 命名返回变量未在 for 循环中设置

c++ - g++ 6.1 可能的 std::forward 回归 - 错误或预期行为?

c - 如何使用 posix_memalign 在 c 中初始化结构

c - 返回零后出现段错误

json - 在函数内调用函数并返回字符串