C コードのコンパイル中に次のエラー メッセージが表示されました。
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
どういう意味ですか?
修正方法は?
あなたはこれをしました:
for (int i=0;i<10;i++) {
そして、これを次のように変更する必要があります。
int i;
for (i=0;i<10;i++) {
または、エラーが示すように、
オプション -std=c99 または -std=gnu99 を使用してコードをコンパイルします。
Ryan Foxの回答からコピーされた更新:
gcc -std=c99 foo.c -o foo
または、標準のメイクファイルを使用している場合は、それを CFLAGS 変数に追加します。
ステートメントと変数宣言を混在させたい場合は、C99 が必要です。他の回答とエラーメッセージ自体が言うよう-std=c99
に、コンパイル時にコマンドラインに追加して、C99 機能を有効にします [1]。
しかし、単一のステートメントの代わりに複合ステートメント ( 「ブロック」 、IOW、しかし標準ではこの単語は使用されません!)を書くことは常に許可されています。
#include<stdio.h>
int main() {
int i = 5;
{ /* new block, new declarations. */
int i;
for (i=0;i<10;i++){
}
}
printf("%d\n", i); /* prints "5\n" */
}
これは、K&R、C90 (別名 C89、同じもの)、およびC99 で有効です。
C99 モードを有効にすると、多くの優れた機能が得られますが、匿名の構造体や構造体や共用体内の共用体など、gcc がデフォルトで許可する他の優れた機能も無効になります。
-std=gnu99
おそらく「すべてのグッズ」が有効になりますが、これを避けるように注意してください。あなた(または他の人)がコードを移植したい場合、それは不必要に困難になります。私はおそらく、自分のお気に入りのプロジェクトの Windows バージョンを誰かが無料で移植したと思います。それはあなたをgccに結びつけます。あなたは縛られたくない。それが標準の血まみれのポイントです。他の回答は、GCC のデフォルト モードに対処するための回避策です。C99 を使用したい場合 (私は一般的に推奨します)、そのコンパイラ フラグを追加する必要があります。
gcc -std=c99 foo.c -o foo
または、標準のメイクファイルを使用している場合は、それを CFLAGS 変数に追加します。
これは、ステートメントで変数を宣言できないことを意味しますfor
。
やったほうがいい:
int i ;
for( i = 0 ; i < len ; i++ )
おそらく何をしているのか
for( int i = 0 ; i < len ; i++ )