次のコードが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」への未定義の参照
私は何を間違えていますか?
動作するのは、計算がコンパイラ自体によって行われたためです(そして、あなたが書いたようにバイナリに含まれています)
printf("8\n");
動作しない場合は、pow
関数が数学ライブラリに含まれており、デフォルトでは数学ライブラリがバイナリにリンクされていないためです。
数学ライブラリをリンクするには、コンパイラがgccの場合、次を使用します。
gcc ... -lm ...
他のコンパイラでも同じである必要があります:)
ただしドキュメントを読む
このように使用する
#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