「C99モード以外で使用されるforループの初期宣言」GCCエラーを修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/24881

  •  09-06-2019
  •  | 
  •  

質問

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言語標準で許可されています。

@Blorgbeard

C99の新機能

  • インライン関数
  • 変数宣言は、ファイルスコープまたは複合ステートメントの開始に制限されなくなりました
  • long long int、オプションの拡張整数型、明示的なブールデータ型、複素数を表す複素数型など、いくつかの新しいデータ型
  • 可変長配列
  • BCPLまたはC ++のように//で始まる1行コメントのサポート
  • snprintfなどの新しいライブラリ関数
  • stdbool.hやinttypes.hなどの新しいヘッダーファイル
  • 型汎用数学関数(tgmath.h)
  • IEEE浮動小数点のサポートの改善
  • 指定された初期化子
  • 複合リテラル
  • 可変長マクロ(可変アリティのマクロ)のサポート
  • 修飾を制限して、より積極的なコード最適化を可能にします

http://en.wikipedia.org/wiki/C99

C99ツアー

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...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top