2012-02-18 20 views
1

私はMinGWでコンパイルされたC99のキーワード_Complexをサポートするライブラリを持っています。このライブラリをMSVC++ 2010コンパイラで使用したいと思います。私は一時的にすべての_Complex構文コードをオフにして、コンパイルするようにしました。私は他の機能のほとんどがMSVC++で正常に機能していることがわかりました。今では、_Complex定義でパーツを有効にしたいのですが、実際にどのようにすればよいかわかりません。VC++の_Complex構文の回避策はありますか?

明らかに私はライブラリがC99の機能などを要求するので、私はMSVC++で再コンパイルできません。しかし、他のほとんどのパーツで完璧に動作するので、それをあきらめて、機能。

私は_Complex構文を必要とするAPIのラッパーを作成し、MinGW GCCでコンパイルしてから自分のMSVCプロジェクトにインポートできると思います。しかし、VC++でC99の複素数構文をコンパイルするときに問題を扱う「標準的な」方法と同じように、この問題のより良い回避策があるかどうかを知りたいですか?

興。 C規格から

答えて

0

(C11§6.2.5¶13、C99は、ほぼ同一の言語を有する):

各複合タイプが正確に2つの要素を含む配列 型と同じ表現とアラインメント要件を有します対応する実数型の値。第1の要素は複素数 の実数部に等しい であり、第2番目の要素は虚数部に等しい。

私の前にC++標準はありませんが、<complex>で定義されている複合型テンプレートの要件は同じです。これは互換性を目的としています。

あなたはので再書き込みC関数はタイプstd::complex<double>の&返す値を取るC++関数としてタイプdouble _Complexの&返す値をとることができます。 C++側のネームマングリングがオフになっている限り(extern "C"経由)、両サイドに互換性があります。このような

何かが役立つかもしれない:

#ifdef __cplusplus 
#include <complex> 
#define std_complex(T) std::complex<T> 
#else 
#define std_complex(T) T _Complex 
#endif 
+0

感謝を。 (私は定期的に自分の投稿をチェックしていない)。私はあなたのソリューションを試してみましょう、良い回避策を聞く。 –

関連する問題