私は現在C(C++ではない)を書いています。 MicrosoftのCコンパイラは、すべての変数を関数の先頭に宣言する必要があります。なぜマイクロソフトのCコンパイラは関数の始めに変数を必要としますか?
たとえば、次のコードはコンパイルを渡しません。
int foo(int x) {
assert(x != 0);
int y = 2 * x;
return y;
}
コンパイラは、コードがそれ以下のように変更された場合
error C2143: syntax error : missing ';' before 'type'
を言って、三行目でエラーを報告します編集をパスします:
int foo(int x) {
int y;
assert(x != 0);
y = 2 * x;
return y;
}
ソースファイル名を.c
を.cpp
に設定すると、コンパイルも正しく行われます。
コンパイラの厳密さを無効にするオプションがあると思われますが、見つけられませんでした。誰もこれを助けることができますか?
ありがとうございます。
私は、Visual Studio 2008 SP1に同梱されているcl.exeを使用しています。
投稿日:
ありがとうございました!私はMicrosoftのcl.exeでC89に住んでいなければならないようだ。
+1。しかし、悪い昔の私に思い出させるためではありません。 –
C99オプションをオンにするオプションについては、cl.exeのヘルプを検索しています。しかし、これまでのところ私はそれについての手がかりを得ていません。 すべての変数を先頭に宣言する必要があり、非常に不便です。 私のコードをコンパイルするためにgccを使用するとうまくいきます。これは、cl.exeがC99標準をサポートしていないことを意味しますか? – yinyueyouge
Ryan:cl.exeはC99をサポートしていないようです。これは信じられないほどです。それはほぼ10年経ちました! – dwc