2012-01-04 5 views
9

私のビルドシステムのMacOS 10.6.3のインターフェースはmath.hですが、ターゲットシステムではインターフェースファイルの名前はcmath.hです。学校ではcmathを使用しています。私は自分のプロジェクトが手渡されたときにコンパイルするようにしたいと思います。学校のサーバーやワークステーションは、Windows XPを実行しているx86です。 GCCは両方のプラットフォームで利用できます。数学インターフェースとC++のcMath

+0

"ターゲットシステム"とは何ですか?どのコンパイラ、どのオペレーティングシステム?教師に 'cmath.h'と' math.h'の違いを教えてください。それは ''または ''ですか? –

+0

申し訳ありませんが、私のホストシステムはmacos、Windows XPはターゲットシステムです。私の教授が答えを知っていれば、ここで質問する必要はありません。 – awiebe

答えて

18

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

<math.h> 

がグローバルでそれらが含まれていながら、

<cmath> 

は、名前空間std(例えばstd::sin)でそれらが含まれています名前空間(だからちょうどsin)。そのような

namespace std { 
    double sin(double); 
    float sin(float); 
    long double sin(long double); 
} 
よう <math.h>は等

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

などの異なるタイプの異なる名前を持つすべてのC数学関数を含むが、<cmath>が過負荷含ま機能:

両者の更なる違いがあります

など(C++ライブラリはsinf<cmath>からさらにエクスポートするかもしれませんが、移植可能なプログラムでこれに頼ることはできません)

最後に、C標準ライブラリのfabs,fabsfおよびfabslファンクションは、<cmath>std::absのオーバーロードになっています。

両方のヘッダが標準であるが<math.h>が先行標準C++とCとの下位互換性

ため<cmath.h>のようなものは、標準C++ではありません唯一の存在であるとして、あなたは本当に、<cmath>を好む必要があります。

+0

OK。私の答えは編集するのではなく、削除しました。私はという名前のスタイルを他の標準ライブラリに使うことについて言及しておきたいと思っていますが、私はあなたに任せます。 –

+0

@HarperShelby:それを最後の近くに入れてください。私はOPがこれを遠くまで読んでくれることを願っています。これはかなりのリストなのですから) –

+0

目標は、そこに良い情報を得ることです。あなたは馬を水などに導くことができます。 –

関連する問題