3

Windows 用の MinGW コンパイラを使用しています。私は C でいくつかのプログラムを作成しています。これについて読んだ記事のほとんどは古くなっているようです...最後に読んだ C99 は GCC では不完全でした これはまだ本当ですか? 私の本当の質問は、C99 設定と GNU99 設定の間のクロスプラットフォーム互換性です... GNU99 設定とその拡張機能の使用を避けて、C99 に固執する必要がありますか? 私は常にVisual Studioを使用しており、何か新しいことを試すことにしたので、このMinGWコンパイラセットは初めてです...現在、これらの設定でコンパイルしています...

-march=native -O3 -std=gnu99

このコンパイラで C プログラムを作成したり、C++ プログラムを作成したりするために入力する必要がある、推奨されるコンパイラ コマンドはありますか?

Windows、Mac、および Linux と互換性のあるシンプルなプログラムを作成したいのですが、最初はほとんどの Windows です。

4

3 に答える 3

3

「任意の」コンパイラでコンパイルするものが必要な場合は、gnu99設定を避けてc89c99またはc11- を使用し、C++ の使用c++03またはc++11(またはc++0xコンパイラの特定のバージョンに応じて) を使用する必要があります。これらのことを後で行うほど、「新しいバージョンのコンパイラ」に限定されます。

これgnu99は、「GNU 拡張機能」を備えた C99 を意味します。つまり、この設定でコンパイルされたコードは、他のコンパイラではコンパイルできない可能性があります。

あなたもぜひ応募-Wallしてください。私も応募したい-Wextra -Werrorです。-Wall(ほぼ) すべての警告を有効にすることを意味し、-Wextraの警告以外の追加の警告を有効にすることを意味し、コードを取得する前に警告を修正する必要があることを意味します (「警告をエラーとして扱う」) -Wall-Werror

于 2013-07-29T01:25:01.380 に答える
1

C99 機能のほとんどは gcc でサポートされています。詳細については、Status of C99 features in GCC を参照してください。

一部の GNU 拡張機能は、使用すると便利です。C99 と GNU99 のどちらを選択するかは、他のコンパイラを使用するかどうかによって異なります。ただし、Visual Studio について考えている場合、C99 はサポートされていないため、後で Visual Studio に戻る場合は、C89 に固執することをお勧めします。

于 2013-07-29T01:24:04.320 に答える
1

C に関しては、Visual Studio 最近までC99 をまったくサポートしていませんでした。

に関しては、それらがサポートする標準と関連する隅々までの詳細な詳細な記事gccを見つけることができます. また、サポートしている拡張機能の優れたリストもあります。拡張機能を使用しているときに、使用する標準を指定するだけでは警告やエラーを生成するには不十分であるため、拡張機能には少し注意する必要があります。たとえば、次を使用すると驚くかもしれません。gcc

gcc -std=c90 -W -Wall

警告なしで可変長配列を使用できます。警告を生成するには、次を追加する必要があります-pedantic

gcc -std=c90 -W -Wall -pedantic

これにより、次のような警告が生成されます。

warning: ISO C90 forbids variable length array ‘array’ [-Wvla]
于 2013-07-29T01:58:00.217 に答える