0

重複の可能性:
C プログラミングの sqrt 関数

C で奇妙な問題に直面しています。ライブラリをヘッダーに含めました。たとえば、pow(x,n)関数も機能します。一方、次のコードはまったく実行されません。

float calcArea(double edgeA){
    double s=edgeA;
    float area = sqrt(s);
    return area;
}

しかし、(または他の自然数)に変更sqrt(s)sqrt(45)ても問題はありません。また、関数をさらに数回チェックしましたsqrt()が、引数が変数である限り、まだそうではありません。

この問題を解決するための提案は役に立ちます。事前に感謝します

編集:Eclipseを使用しています

4

2 に答える 2

4

数学ライブラリをリンクするようにコンパイラに指示する必要があります。Linux では、次のようにコンパイルする必要があります。

   gcc -Wall -g yoursource.c -o yourprog -lm

への引数の順序gccは重要です。最初にソース ファイル、次にオブジェクト ファイル、次に高レベルから低レベルのライブラリです。

それを使用する場合にエラーが発生しない理由については、定数を折りたたんでインライン化する可能性sqrt(42)があるためです。gcc

于 2012-11-05T08:04:14.280 に答える
3

コンパイル時に数学ライブラリをリンクする必要があります

-lm

使用しているコンパイラはわかりませんでしたが、ビジュアル スタジオの場合は次のことを試すことができます。

http://www.steptools.com/support/stdev_docs/help/settings_vc10.html#link

編集:日食についてはヘルプを参照してください

于 2012-11-05T08:03:46.550 に答える