2016-06-27 15 views
0

int型、long型、double型の絶対値を見つけるのに "abs"関数を使ったところで約200のファイルがあります。倍精度の場合、適切な関数呼び出しはfabsでありabsではありません。 C++ 11ではdouble型のabsサポートとしても扱われていますが、現在は古いコンパイラを使用しています。func2(double X)を#defineコールする方法(double X)

C++ 11への移行は来年に予定されており、断続的に修正が必要です。

これらすべてのファイルには、最初はStdAfx.hというヘッダーがあります。だから#define abs(X)fabs(X)のようなものが欲しい。しかし問題は、これらのファイルには、absやfabが実際に宣言されているmath.hなどの他のヘッダもあり、これらのコードをコンパイルできないようにすることです。

GCCでは、absとfbsの宣言があるため、absが再宣言されています。

StdAfx.hの中でabs(double x)に "CALL"だけがfabs(double X)に変換され、その定義は翻訳されないようにしたいと思います。

私を親切に案内します。

+0

希望することはできません。代わりにコードを書き直してください。 –

+0

私は、これが影響を受けるビットのコードを修正するのが好ましいと思われる理由は分かりません。クイックビルドを行うことができるかもしれませんが、長期的なメンテナンスの観点からは価値がないようです。 –

答えて

3

マクロは必要ありません。共通ヘッダーファイルにabsをオーバーロードしてください:

static double abs(double x) { return fabs(x); } 
+0

また、操作ネームスペース(例:my_abs_double_overload)でオーバーロードを定義し、 "using namespace my_abs_double_overload"ステートメントを使用してそのネームスペースを有効範囲に持っていくことを検討してください(より明確な意図とC++ 11サポートでifdefすることができます) ? –

関連する問題