「C99モード以外で使用されるforループの初期宣言」GCCエラーを修正するにはどうすればよいですか?
質問
3n + 1の問題を解決しようとしていますが、次のような for
ループ:
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
残念ながら、GCCでコンパイルしようとするとこのエラーが発生します:
3np1.c:15:エラー: 'for'ループ初期 C99モード以外で使用される宣言
C99モードが何なのかわかりません。アイデアはありますか?
解決
ループの外で i
を宣言しようとします!
3n + 1を解いて頑張ってください:-)
例を次に示します。
#include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %d\n", i);
}
return 0;
}
Cのforループの詳細を読むこちら。
他のヒント
C99モードを有効にするコンパイラスイッチがあります。 forループ内の変数。オンにするには、コンパイラスイッチ -std = c99
または@OysterDが言うように、ループ外で変数を宣言します。
CodeBlocks で C99 モードに切り替えるには、次の手順に従います。
プロジェクト/ビルドオプションをクリックし、コンパイラ設定タブでサブタブその他のオプションを選択し、 -std = c99 <を配置します
をテキスト領域に追加し、[ OK ]をクリックします。
これにより、コンパイラの C99 モードがオンになります。
これが誰かの助けになることを願っています!
このエラーも発生しました。
for (int i=0;i<10;i++) { ..
はC89 / C90標準では無効です。 OysterDが言うように、あなたはする必要があります:
int i;
for (i=0;i<10;i++) { ..
元のコードは、C99以降のC言語標準で許可されています。
C99の新機能
- インライン関数
- 変数宣言は、ファイルスコープまたは複合ステートメントの開始に制限されなくなりました
- long long int、オプションの拡張整数型、明示的なブールデータ型、複素数を表す複素数型など、いくつかの新しいデータ型
- 可変長配列
- BCPLまたはC ++のように//で始まる1行コメントのサポート
- snprintfなどの新しいライブラリ関数
- stdbool.hやinttypes.hなどの新しいヘッダーファイル
- 型汎用数学関数(tgmath.h)
- IEEE浮動小数点のサポートの改善
- 指定された初期化子
- 複合リテラル
- 可変長マクロ(可変アリティのマクロ)のサポート
- 修飾を制限して、より積極的なコード最適化を可能にします
Cの変更でコンパイルする場合
for (int i=0;i<10;i++) { ..
to
int i;
for (i=0;i<10;i++) { ..
C99スイッチセットを使用してコンパイルすることもできます。コンパイル行に-std = c99を追加します。
gcc -std=c99 foo.c -o foo
REF: http://cplusplus.syntaxerrors.info/index.php?title= 'for'_loop_initial_declaration_used_outside_C99_mode
同じ問題があり、ループの外で i
を宣言するだけで機能します:
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Make などの自動ビルドユーティリティを使用する外部ソースからコードをコンパイルしようとする場合は、明示的なgccコンパイル呼び出しを追跡する必要がないように、環境変数を設定できます。コマンドプロンプトで入力するか、.bashrc(またはMacの場合は.bash_profile)に入力します。
export CFLAGS="-std=c99"
C ++ 11を必要とするC ++コンパイルで同様のシナリオを実行した場合、同様の解決策が適用されることに注意してください。
export CXXFLAGS="-std=c++11"
Qt-creatorの場合:* .proファイルに次の行を追加するだけです...
QMAKE_CFLAGS_DEBUG = \
-std=gnu99
QMAKE_CFLAGS_RELEASE = \
-std=gnu99
Jihene StambouliがOP質問に最も直接回答しました... 質問は なぜ
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
エラーを生成する;
3np1.c:15: error: 'for' loop initial declaration used outside C99 mode
答えは
for(int i = low...
あるべき
int i;
for (i=low...