web-dev-qa-db-ja.com

pow()関数を使用すると、Cで未定義の参照エラーがスローされます

次のコードがCで機能するのはなぜですか。

int res = pow(2, 3);
printf("%d\n", res);

この他はそうではありませんか?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);

試してみても

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);

私は

「pow」への未定義の参照

私は何を間違えていますか?

33

動作するのは、計算がコンパイラ自体によって行われたためです(そして、あなたが書いたようにバイナリに含まれています)

printf("8\n");

動作しない場合は、pow関数が数学ライブラリに含まれており、デフォルトでは数学ライブラリがバイナリにリンクされていないためです。
数学ライブラリをリンクするには、コンパイラがgccの場合、次を使用します。

gcc ... -lm ...

他のコンパイラでも同じである必要があります:)
ただしドキュメントを読む

54
pmg

このように使用する

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

int main(void)
{
  for(int i = 1; i < 5; i++)
     printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));  
  return 0;
}

出力:

pow(3.2、1)= 3.200000

2
Karthik Ratnam