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

标签 c pow

假设我有以下代码片段:

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/

相关文章:

c - 如何实现动态共享内存大小调整?

C 程序显示数组中的数字(如果是 2 的幂)

java - 从 C 程序调用 Java

c - #Define 在整个库中的作用域?

c - C 中的 Vigenere 密码不起作用

c++ - 为什么 C++ 中的 pow() 返回负数

c - 如果分配给整数,则 pow() 的返回值会向下舍入

java - 为什么 Math.pow(x,y) 算作 Double?

java - 为什么基本数学函数没有为 Java 中的不同类型重载,Math?

我可以用 popen() 解析 ngrep 的输出吗?