为什么下面的代码在C中起作用:
int res = pow(2, 3);
printf("%d\n", res);
而另一个没有?
int a = 2;
int b = 3;
int res = pow(a, b);
printf("%d\n", res);
即使我尝试
double a = 2;
double b = 3;
double res = pow(a, b);
printf("%f\n", res);
我得到了
对'pow'的未定义引用
我做错了什么?
答案 0 :(得分:54)
当它工作时,这是因为计算是由编译器本身完成的(并且包含在二进制文件中,就像你写出来一样)
printf("8\n");
当它不起作用时,是因为pow
函数包含在数学库中,并且默认情况下数学库没有与二进制文件链接。
要使数学库链接,如果编译器是gcc,请使用
gcc ... -lm ...
与其他编译器一样,应该是相同的:) 但请阅读文档
答案 1 :(得分:17)
undefined reference to 'pow'
听起来像链接器错误。即使您通过包含pow
引入函数<math.h>
,也不会在数学库中进行链接。
使用gcc,使用-lm
命令行参数链接数学库。
答案 2 :(得分:2)
像这样使用
#include <math.h>
#include <stdio.h>
int main(void)
{
for(int i = 1; i < 5; i++)
printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));
return 0;
}
输出:
pow(3.2,1)= 3.200000
答案 3 :(得分:-5)
对'pow'的未定义引用
因为任何数字的幂必须具有整数值作为幂
pow(x,y)
where, x must be real and y must be a whole number