3

「複素数型の GNU 拡張機能」の構文は気に入っていますが、complex.h とは異なり標準ではないことはわかっています。それで、私はどれを使うべきですか?

4

2 に答える 2

4

これは本当にあなたにとって何が最も重要かという問題です。

いつか gnu 以外のコンパイラでコードを使用する可能性がある場合<complex.h>.

gnu コンパイラのみをターゲットにしていることが合理的に確信できる場合、または少なくとも最終的にコードを書き直さなければならない可能性に見合う価値のある構文の改善を考慮する場合は、代わりに gnu 拡張機能を使用する方が理にかなっている可能性があります。 .

少なくとも私にとっては、かなり単純な状況に帰着します。コードが (合理的にでも) 移植可能であれば、複雑な型の標準にも従います。コードが十分な数の gnu 拡張機能を使用している場合、それ以外の場合、別のコンパイラへの移植にはおそらく (ほぼ) 完全な書き直しが必要になるため、gnu 拡張機能のほうがよければそれらを使用することもできます。

また、移植は実際には唯一の考慮事項ではありませんが、すべて一緒に機能することも付け加えておきます。可読性はほとんど同じように機能します-コードを読むために誰かがgnu拡張について知る必要があるほど十分なgnu拡張を使用している場合、複雑な拡張のためにそれらの拡張を使用しても少しの損失はありません. コードが十分に標準的で、他の方法で読むことができる場合、複雑なためだけに独自の拡張機能を追加することは、おそらく良い考えではありません。

于 2012-07-07T17:18:43.367 に答える
1

どちらも移植性の問題を引き起こします。コードを操作する必要があるコンパイラのセットに基づいて決定する必要があります。

<complex.h>もちろん、C99は標準言語の一部ですが、すべてのコンパイラが C99 をサポートしているわけではありません。特に、マイクロソフトは、たまたま C++ に存在する機能を除いて、C99 以降の標準をサポートする予定はないと述べています。(C++ は複素数をサポートしていますが、C99 のように組み込み型のセットとしてではなく、ライブラリとしてサポートしています。)

一方、gcc 拡張機能は、gcc または gcc と十分に互換性のあるコンパイラでのみ機能します。

<complex.h>gcc 拡張機能よりも移植性が高いと思います。どちらでも Microsoft のコンパイラを使用することはできませんが、C99 をサポートする実装はすべてサポートされます<complex.h>

(別の方法は、C ではなく C++ を使用し、C++ の を使用すること<complex>です。)

于 2012-07-07T21:40:09.500 に答える