0

重複の可能性:
pow() が定義されていません

void octal2decimal(char *octal, char *decimal) {
int oct = atoi(octal);
int dec = 0;
int p = 0;

while (oct!=0) {

    dec = dec + (oct%10) * pow(8,p++); //since oct is base 8 
    oct/=10;
}
*decimal = (char)dec;
*/
}

上記の次のコードでは、このエラーが発生します。なぜ含めるのかわかりませんmath.hが、それでもこのエラーが発生します

/tmp/cck07bLe.o: In function 'octal2decimal':
data-converter.c:(.text+0x35f): undefined reference to 'pow'
collect2: ld returned 1 exit status

どういう意味ですか?どうすれば修正できますか?

4

2 に答える 2

5

数学ライブラリは、デフォルトで含まれている標準 C ライブラリの一部ではありません。数学ライブラリとのリンク:

gcc file.c -o file -lm
于 2012-10-24T16:15:33.133 に答える
1

powlibmは、既定ではリンクされていない数学ライブラリ ( ) で定義されています。-lmしたがって、数学ライブラリを取得するには、コンパイル コマンドに追加する必要があり ます。たとえば、次を使用している場合gcc:

gcc data-converter.c -o data-converter -lm

ところで、powは 2 の整数乗を計算する正しい方法ではありません。代わりにシフトを使用する必要があります。

dec += (oct%10) << (3*p++);
oct /= 10;

左にシフトすることは 8 p3*pを掛けることと同じですが、浮動小数点数を避けます。

于 2012-10-24T16:14:38.240 に答える