使用pow()函数会在C中引发未定义的引用错误

dev*_*ium 33 c math.h

为什么下面的代码在C中有效:

int res = pow(2, 3);
printf("%d\n", res);
Run Code Online (Sandbox Code Playgroud)

而这另一个不?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);
Run Code Online (Sandbox Code Playgroud)

即使我试试

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);
Run Code Online (Sandbox Code Playgroud)

我得到了

未明确引用`pow'

我究竟做错了什么?

pmg*_*pmg 54

当它工作时,这是因为计算是由编译器本身完成的(并且包含在二进制文件中,就像你写出来一样)

printf("8\n");
Run Code Online (Sandbox Code Playgroud)

当它不起作用时,是因为该pow函数包含在数学库中,并且数学库默认情况下不与您的二进制文件链接.
要使数学库链接,如果您的编译器是gcc,请使用

gcc ... -lm ...
Run Code Online (Sandbox Code Playgroud)

与其他编译器,应该是相同的:)
但阅读文档

  • 你是真的!海湾合作委员会使用MPFR.以下是一些信息:http://gcc.gnu.org/gcc-4.3/changes.html#mpfropts (4认同)

eq-*_*eq- 17

undefined reference to 'pow'听起来像链接器错误.您没有在数学库中链接,即使您pow通过包含引入该功能<math.h>.

使用gcc,使用-lm命令行参数链接到数学库中.

  • 如果您注意到,相同的答案相隔1分钟发布.这可能有助于解释原因. (11认同)