22

C コードのコンパイル中に次のエラー メッセージが表示されました。

error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code

どういう意味ですか?

修正方法は?

4

4 に答える 4

34

あなたはこれをしました:

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 変数に追加します。

于 2013-04-08T02:58:06.960 に答える
7

ステートメントと変数宣言を混在させたい場合は、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 がデフォルトで許可する他の優れた機能も無効になります

  1. -std=gnu99おそらく「すべてのグッズ」が有効になりますが、これを避けるように注意してください。あなた(または他の人)がコードを移植したい場合、それは不必要に困難になります。私はおそらく、自分のお気に入りのプロジェクトの Windows バージョンを誰かが無料で移植したと思います。それはあなたをgccに結びつけます。あなたは縛られたくない。それが標準の血まみれのポイントです。
于 2013-04-08T04:37:18.440 に答える
6

他の回答は、GCC のデフォルト モードに対処するための回避策です。C99 を使用したい場合 (私は一般的に推奨します)、そのコンパイラ フラグを追加する必要があります。

gcc -std=c99 foo.c -o foo

または、標準のメイクファイルを使用している場合は、それを CFLAGS 変数に追加します。

于 2013-04-08T03:37:28.273 に答える
2

これは、ステートメントで変数を宣言できないことを意味しますfor

やったほうがいい:

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

おそらく何をしているのか

for( int i = 0 ; i < len ; i++ )
于 2013-04-08T02:58:28.913 に答える