【发布时间】:2013-12-08 01:52:56
【问题描述】:
GCC 在尝试编译时给我以下警告消息:
las.c:13:18: warning: initializer element is not a constant expression [enabled by default]
const int ROWS = pow (2, MESH_K);
与此相关的代码部分是:
#define MESH_K 10
#define BUFF_SIZE 30
const int ROWS = pow (2, MESH_K);
我需要在后面的代码中同时使用 MESH_K 和 ROWS。我知道函数调用可能导致 GCC 相信这不是一个常量表达式。但是,鉴于对 pow 的调用本质上是一个常量,是否有更好的方法来实现它(也许是预处理器宏?)并消除警告?
我不介意在这部分代码中为了性能而牺牲可读性,因此欢迎任何和所有复杂的解决方案。
【问题讨论】:
-
不确定这是否可行,但请尝试
const int ROWS = 1 << MESH_K;。 -
有效!并获得更优化解决方案的奖励。但是,如果您能提供帮助并将其设为编译时间常数,我将不胜感激。
-
试试这个:
#define POW_2_MESH_K 1 << MESH_K -
@squeamishossifrage 如果您可以将此作为答案发布,我会接受!
-
我刚刚检查了 GCC 生成的 asm 代码,它已经执行了所需的优化。所以我想,这一切现在都完成了。