9

我编写了一个具有来自 math.h 库的幂函数的 C 代码。当我编译我的程序时,我收到一个错误,即“未定义对‘pow’函数的引用”,我使用 gcc 编译器(fedora 9)编译我的程序。

然后我将 -lm 标志插入 gcc,错误被省略,但 pow 函数的输出为 0。

#include<math.h>
main()
{
double a = 4, b = 2;
b = pow(b,a);
}

谁能帮我?我的编译器有问题吗?

谢谢。

4

4 回答 4

13

对于寻求此类答案的其他所有人:

这不起作用

gcc my_program.c -o my_program

它会产生这样的东西:

/tmp/cc8li91s.o: In function `main':
my_program.c:(.text+0x2d): undefined reference to `pow'
collect2: ld returned 1 exit status

这将起作用

gcc my_program.c -o my_program -lm
于 2012-05-27T13:56:39.377 回答
9

您的程序不输出任何内容。

您所指的 0 可能是退出代码,如果您没有明确地从main.

尝试将其更改为符合标准的签名并返回b

int main(void) {
  ...
  return b;
}

请注意,返回值本质上仅限于 8 位的信息,因此非常非常有限。

用于printf显示值。

#include <stdio.h>
...
  printf("%f\n", b);
...

必须使用浮点转换说明符 ( f,ge) 来打印double值。您不能使用d或其他人并期望一致的输出。(这实际上是未定义的行为。)

于 2012-05-27T13:06:30.980 回答
4

您缺少将值打印到标准输出的 printf 行。试试这个:

#include <stdio.h>
#include <math.h>

int main() {
        double a=4, b=2, c;

        c = pow(b,a);
        printf("%g^%g=%g\n", a,b,c);
        return 0;
}

输出将是:

4^2=16
于 2012-05-27T13:19:18.480 回答
4

这里有关于基数和指数的混淆。这不是很明显,因为 2^4 和 4^2 都等于 16。

void powQuestion()
{
    double a, b, c;

    a = 4.0;
    b = 2.0;
    c = pow(b, a);

    printf("%g ^ %g = %g\n", a,b,c);        // Output: 4 ^ 2 = 16

    a = 9.0;
    b = 2.0;
    c = pow(b, a);

    printf("%g ^ %g = %g\n", a,b,c);        // Output: 9 ^ 2 = 512  >> Wrong result; 512 should be 81 <<


    // K & R, Second Edition, Fifty Second Printing, p 251: pow(x,y) x to the y

    double x, y, p;

    x = 9.0;
    y = 2.0;
    p = pow(x, y);

    printf("%g ^ %g = %g\n", x, y, p);      // Output: 9 ^ 2 = 81


    // even more explicitly

    double base, exponent, power;

    base = 9.0;
    exponent = 2.0;
    power = pow(base, exponent);

    printf("%g ^ %g = %g\n", base, exponent, power);    // Output: 9 ^ 2 = 81
}
于 2015-04-19T21:59:49.820 回答