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は、おそらく終了コードです。明示的にから戻らない場合は0になりますmain

標準に準拠した署名に変更して、次を返しbます。

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

戻り値は基本的に8ビット相当の情報に制限されているため、非常に制限されていることに注意してください。

printf値を表示するために使用します。

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

値を出力するには、浮動小数点変換指定子(、、または)を使用する必要があります。または他のものを使用して、一貫した出力を期待することはできません。(これは実際には未定義の動作になります。)fgedoubled

于 2012-05-27T13:06:30.980 に答える
4

値をstdoutに出力するための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 に答える