3

私はこのページを見ています:

C ++では、プログラムのほぼどこでも変数を宣言できます。これはCには当てはまりません。変数は関数の先頭で宣言する必要があり、他のコードの前に宣言する必要があります。これにはループカウンター変数が含まれます。つまり、これを行うことはできません。

for(int i = 0; i < 200; i++) {

どこでも変数を宣言できないことを忘れることは、C++からCに移行するプログラマーにとって「コンパイルされない」問題の最も頻繁な原因の1つです。

私はしばらくの間Objective-Cを使用しているので、Cですが、 for(int i = 0; i < 200; i++) {Objective-C厳密にCであるなどのステートメントに問題はありません。このWebページは何を参照していますか?

4

1 に答える 1

6

WebページはC89を不正確に特徴付けています。

C89では、任意のブロックの先頭(関数の開始時だけでなく)で変数を宣言できましたが、ブロック内のどの時点でも宣言できませんでした。

C99以降では、ブロックの先頭で変数を宣言する必要はありません。具体的には、C99では次のように記述できます。

for (int i = 0; i < max; i++)

GCCを使用しているが、MSVCとの互換性を維持する必要がある場合は-Wdeclaration-after-statement、ステートメントの後に変数を宣言するタイミングを検出するために使用できます(C89では許可されていません)。

Objective Cは、拡張する標準としてC89ではなくC99を使用していると思われるため、必要に応じて変数宣言を行うことができます。

于 2012-11-16T05:02:17.277 に答える