我编写了一个具有来自 math.h 库的幂函数的 C 代码。当我编译我的程序时,我收到一个错误,即“未定义对‘pow’函数的引用”,我使用 gcc 编译器(fedora 9)编译我的程序。
然后我将 -lm 标志插入 gcc,错误被省略,但 pow 函数的输出为 0。
#include<math.h>
main()
{
double a = 4, b = 2;
b = pow(b,a);
}
谁能帮我?我的编译器有问题吗?
谢谢。
对于寻求此类答案的其他所有人:
这不起作用:
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
您的程序不输出任何内容。
您所指的 0 可能是退出代码,如果您没有明确地从main
.
尝试将其更改为符合标准的签名并返回b
:
int main(void) {
...
return b;
}
请注意,返回值本质上仅限于 8 位的信息,因此非常非常有限。
用于printf
显示值。
#include <stdio.h>
...
printf("%f\n", b);
...
您必须使用浮点转换说明符 ( f
,g
或e
) 来打印double
值。您不能使用d
或其他人并期望一致的输出。(这实际上是未定义的行为。)
您缺少将值打印到标准输出的 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
这里有关于基数和指数的混淆。这不是很明显,因为 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
}