0

pow は、2 番目のパラメーターを gcc の変数として受け入れません。

次のコードは VC++10 で正常に動作します

// file test.cc
#include "stdafx.h"
#include <stdio.h>
#include <math.h>

int main(void)
{   
    double x = 10;
    int y = 20;
    printf("%f\n", pow(x, y));
    return 0;
}

ただし、次のコードは gcc では機能しません。

// test.c
#include <stdio.h>
#include <math.h>

int main(void)
{   
    double x = 10;
    int y = 20;
    printf("%f\n", pow(x, y)); // error here, says no such function, however when pass the second argument in `pow` for the code runs by gcc, It works fine!
    return 0;
}
4

2 に答える 2

6

あなたは間違っています。2 番目のパラメーターとは関係ありません。

POSIXish システムpow()では libm にありますが、win32ish システムでは標準 C ライブラリの一部です。これは、次の代わりに次のことを意味します。

$ gcc program.c
/tmp/ccTw1gCA.o: In function `main':
program.c:(.text+0x30): undefined reference to `pow'

これを行う必要があります:

$ gcc program.c -lm
于 2010-05-19T14:16:02.037 に答える
2

2 番目のパラメーターが変数としてではなく定数として機能するように見える理由は、gcc に pow() の組み込み実装があるためです。2 番目のパラメーターが定数の場合は、それを使用している可能性があります。変数の場合は、glibc の pow() 関数にフォールバックしています。見る:

http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Other-Builtins.html#Other-Builtins

-fno-builtinを gcc に渡すと、一貫した動作が見られるはずです。この場合、pow() に何を渡してもエラー メッセージが表示されます。他の人が言及したように、 math.h から何かを使用するときはいつでも-lmとリンクする必要があります。

于 2010-05-24T02:58:51.277 に答える