pow(double、double)関数が "math.h"で定義されていることを読みましたが、その宣言が見つかりません。
この関数がどこで宣言されたか知っている人はいますか?そしてそれはCでどこに実装されていますか?
参照:
http://publications.gbdirect.co.uk/c_book/chapter9/maths_functions.html
pow(double、double)関数が "math.h"で定義されていることを読みましたが、その宣言が見つかりません。
この関数がどこで宣言されたか知っている人はいますか?そしてそれはCでどこに実装されていますか?
参照:
http://publications.gbdirect.co.uk/c_book/chapter9/maths_functions.html
多くの場合、のようなインクルードファイルには、<math.h>
で表示されると予想される関数を実際に宣言する他のヘッダーファイルが含まれます<math.h>
。<math.h>
アイデアは、実際の関数定義が他のヘッダーファイルにある場合でも、プログラムがインクルードすると期待どおりの結果を得るということです。
のような標準ライブラリ関数の実装を見つけることpow()
は、まったく別の問題です。ソースコードをC標準ランタイムライブラリに掘り下げて、そこに実装を見つける必要があります。
宣言:システム/SDK のインクルード ディレクトリ (例: /usr/include;/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk/usr/include/architecture/arm/math.h)
定義 (実装):
pow の関数宣言の extern キーワードは、別の場所で定義されていることを意味します。数学関数は、主にアセンブリ コード (*.s) で実行される低レベルの高性能実装です。アセンブリ ルーチン (引数を受け取る/レジスタ/スタックを介してパラメーターを与える) は、C ライブラリの残りの部分とリンクされています。関数/ルーチン名のリンク/エクスポートはプラットフォーム固有であり、目的がアセンブリ コーディングに飛び込まない場合は、実際には問題になりません。
これがお役に立てば幸いです、ラファエル
の実際の実装はpow
、コンパイラによって異なる場合があります。通常、math.h (または math.h に含まれるベンダー固有のファイル) はプロトタイプ(つまり、その宣言)を提供しますpow
が、実装は libm.a などの一部のライブラリ ファイルに埋もれています。コンパイラによっては、pow
またはその他のライブラリ関数の実際のソース コードが利用できない場合があります。
計算の実装方法を知りたい場合は、ここで見つけることができます: http://fossies.org/dox/gcc-4.5.3/e__pow_8c_source.html 関数の名前は __ieee754_pow で、pow 関数によって呼び出されます。
私は本当にで定義されていmath.h
ます。含めmath.h
て単純に使用してみましたpow
か?「見つからない」とはどういう意味ですか?