10

POSIX数学ライブラリ用のビルドシステムMacOS10.6.3のインターフェイスはmath.hですが、ターゲットシステムのインターフェイスファイルの名前はcmath.hです。学校ではcmathを使用していますが、プロジェクトが提出されたときに確実にコンパイルされるようにしたいと思います。これはどのように実現されますか。学校のサーバーとワークステーションは、WindowsXPを実行しているx86です。GCCは両方のプラットフォームで利用できます。

4

1 に答える 1

23

C ++標準では、数学ライブラリ関数は2つのヘッダーで定義されています。

<cmath>

それらを名前空間std(例std::sin)に含めますが、

<math.h>

それらをグローバル名前空間に含めます(つまり、sin)。

2つの間にさらに違いがあります:whileには、次<math.h>のような異なるタイプの異なる名前を持つすべてのC数学関数が含まれています

double sin(double);
float sinf(float);
long double sinl(long double);

など、<cmath>次のようなオーバーロードされた関数が含まれています

namespace std {
    double sin(double);
    float sin(float);
    long double sin(long double);
}

など(C ++ライブラリはsinfから追加<cmath>でエクスポートする場合がありますが、ポータブルプログラムではこれに依存することはできません。)

最後に、C標準ライブラリのfabsfabsfおよびfabsl関数は、のオーバーロードになりstd::absました<cmath>

両方のヘッダーが標準に含まれていますが、以前の標準のC ++およびCとの下位互換性のためにのみ存在するため<cmath>、実際に優先する必要があります。<math.h>

<cmath.h>標準のC++のようなものはありません。

于 2012-01-04T21:27:15.410 に答える