假设我有以下代码片段:
int i; double value;
for(i = 0; i < CONSTANT; i++) {
value = (double)pow(2, i);
}
尝试编译此代码会产生“对 `pow' 的 undefined reference ”错误。
包含或排除 math.h
没有区别,因为无论如何它最终都会被包含在内。
将 2.0
提高到硬编码的幂可以正常工作,但如果我用包含 i
的表达式替换指数,一切都会失败。
我做错了什么?谢谢。
最佳答案
这是一个非常有趣的行为,也是一个很好的学习例子。
要解决你的问题,添加
-lm
到您的 gcc 命令行(前提是您使用的是 gcc)。这告诉编译器链接到数学库。
似乎正在发生的事情是,如果您正在使用
pow(2.0, 3);
编译器意识到此表达式的计算结果为常量,并仅进行替换。
因此,无需调用任何库函数。
关于C 的 pow 函数拒绝使用可变指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431053/