C的pow函数拒绝使用变量指数

9 c pow

假设我有以下代码段:

int i; double value;
for(i = 0; i < CONSTANT; i++) {
  value = (double)pow(2, i);
}
Run Code Online (Sandbox Code Playgroud)

尝试编译此代码会产生"未定义的对'pow'的引用"错误.

包括或排除math.h没有区别,因为它最终被包括在内.

提升2.0到硬编码的电源工作正常,但如果我用包含的表达式替换指数,一切都会失败i.

我究竟做错了什么?谢谢.

qdo*_*dot 16

这是一个非常有趣的行为,也是一个很好的学习例子.

要解决您的问题,请添加

-lm
Run Code Online (Sandbox Code Playgroud)

到你的gcc命令行(如果你正在使用gcc).这告诉编译器链接数学库.

似乎正在发生的事情是,如果你正在使用

pow(2.0, 3);
Run Code Online (Sandbox Code Playgroud)

编译器意识到这个表达式的计算结果为常量,并且仅仅是替换.

因此,不必调用库函数.