9

最近-pedantic、gcc のオプションを有効にしましたが、「ISO C90 では宣言とコードの混合が禁止されています」という警告が 2 ~ 3 ページ表示されます。

このプロジェクトでの私の目標は、ac コンパイラを備えたあらゆる主流システムに展開できるようにすることです。そのため、C99 がどこでもサポートされると仮定するのは賢明ではないことを認識していますが、これらの警告に対処するのに時間をかける価値はありますか?

混合宣言とコードをサポートしない C コンパイラを備えたシステムがまだ存在しますか?

4

6 に答える 6

7

C89/90 または C99 でコードを作成する意図はありましたか?

これはあなたが懸念しているように見える唯一の警告であるため、コードは実際には C89/90 で書かれているようです。そうであり、C89/90 に固執する予定がある場合は、厳密な C89/90 に固執し、すべての宣言をブロックの先頭に移動します。

一方、C99 への切り替えを希望し、計画している場合は、「間違った」宣言はもはや問題ではありません。次に、主な関心事はプラットフォーム/コンパイラのサポートになります。MS Visual Studio C コンパイラは C89/90 コンパイラです。これは問題ですか?(GCC が Windows プラットフォームで使用可能であることを考慮して)。

于 2009-12-29T18:13:28.327 に答える
2

Visual Studio C コンパイラでは、宣言とコードを混在させることはできません。Microsoft はおそらく、C99 の完全なサポートを Visual Studio に追加することはありません。Windows の世界では、C はそれほど重要ではありません。

于 2009-12-29T20:32:47.373 に答える
1

変更するかどうかわかりません。

ただし、決定した場合は、非常に簡単です (そうすべきかもしれません)。コードブロックを開始した直後にすべての宣言を行ってください。絶対に後​​で定義する必要がある場合は、ネストされた別のコード ブロックを使用してください。

于 2009-12-29T17:48:35.800 に答える
1

IIRC、Visual C++ では、C モードで宣言とコードを混在させることはできません。

Visual C++ は、一般的に C99 のサポートにおいて遅れをとっています。ただし、状況は最近改善された可能性があり、とにかくコードを C++ モードでコンパイルできる可能性があります。

于 2009-12-29T18:04:24.803 に答える
0

コードと宣言を混在させることは広くサポートされている機能ではないため、その特定の警告を削除します。

実際、私が書いているライブラリにも同じ問題があります。私は可変引数マクロを使用していますが、それらはよりサポートされているようです。

私のライブラリが他の人にとって本当に使いやすいものであることを確認するために、できる限り多くのコンパイラでテストします。私はすでに Visual C++ Express と Pelles C でそれを行っており、他のもの (少なくとも OpenWatcom、Mars C、lcc-Win32) を試してみます。

残念ながら、SourceForge は、数年前に提供していたようなコンパイラ ファームを提供しなくなりました。商用の Unix コンパイラでテストすることはできません。

于 2009-12-30T08:00:21.293 に答える