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]。
ただし、複合ステートメント(a "block"、IOWを記述することは常に許可されていますが、標準ではこのWordを使用しません!)単一のステートメント。
#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、同じこと)、andC99で有効です。
C99モードを有効にすると、多くの cool stuff が得られますが、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++ )