Cコードのコンパイル中に、私は、次のエラーメッセージが表示されました:CプロジェクトをC99モードでコンパイルする方法は?
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
それが何を意味するのか?
どのようにそれを修正するには?
Cコードのコンパイル中に、私は、次のエラーメッセージが表示されました:CプロジェクトをC99モードでコンパイルする方法は?
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を使用してコードをコンパイルします。
gcc -std=c99 foo.c -o foo
それとも、あなたは標準のメイクファイルを使用している場合、CFLAGS変数に追加してください:ライアン・フォックスの答えからコピー
更新。
for
ステートメントに変数を宣言することはできません。
あなたが行う必要があります。
int i ;
for(i = 0 ; i < len ; i++)
あなたはおそらく
for(int i = 0 ; i < len ; i++)
やっている他の回答は、あなたのGCCのデフォルトモードに対処するための回避策を与えます。あなたは(私は一般的にお勧めします)C99を、使用したい場合、あなたはそのコンパイラフラグを追加する必要があります。
gcc -std=c99 foo.c -o foo
それとも、あなたは標準のメイクファイルを使用している場合、CFLAGS変数に追加します。
文と変数の宣言を混在させるには、C99が必要です。他の答えとエラーメッセージ自体が言うように、C99の機能[1]を有効にするためにコンパイルするときには、コマンドラインに-std=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モードを有効にすると、cool stuffがたくさん表示されますが、構造体や共用体内の匿名の構造体や共用体など、gccがデフォルトで許可するいくつかのクールな機能は無効になります。
-std=gnu99
おそらく「すべての機能」が有効になっている可能性がありますが、これを避けるように注意します。あなた(または他の人)がコードを移植したい場合、それは不必要な難しさをします。私はおそらく誰かが自由に移植した私のペットプロジェクトのWindows版を持っていただろうが、私はこれをやっていない。それはあなたにgccを結びつけます。あなたは結ばれたくありません。それが、全面的な基準のひとつです。あなたの記事には 'C90'と書いてあります。 'C89'と' C90'の違いは何ですか?例えば; 'Introduction to GCC'の' 3.3.3'は '-std = c89'、' -std = iso9899'、 '-std = c99'を与えています。私は 'C90 'を見ませんでした。 –
ANSI委員会は1989年に最初のC標準を採択しました.ISO委員会は1990年に同じ基準を採用しました。これは同じことです。 –
はい。元のANSI委員会は、国際社会のためのスタンダードを準備するために非常に頑張った。 ISO委員会が行ったわずかな変更があったが、ANSI委員会はその変更を採用した。彼らはまったく同じです。そう、はい、彼らは交換可能に使用することができます(しかし、誰かが混乱している場合、同じであると説明する準備ができています:)。 –
まあ、多分あなたのコードを見せてもいいでしょう。 – OldProgrammer
forループから初期化を引き出します。 – Mysticial
コンパイラは、エラーメッセージでそれを修正する方法を示しています。 – chris