126

私は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モードとは何かわかりません。何か案は?

4

11 に答える 11

158

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ループの詳細については、こちらをご覧ください。

于 2008-08-24T06:31:16.480 に答える
124

C99モードを有効にするコンパイラスイッチがあります。これにより、特にforループ内で変数を宣言できます。オンにするには、コンパイラスイッチを使用します-std=c99

または、@ OysterDが言うように、ループの外側で変数を宣言します。

于 2008-08-24T06:46:57.647 に答える
23

CodeBlocksでC99モードに切り替えるには、次の手順に従います。

[プロジェクト/ビルド オプション] をクリックし、[コンパイラ設定] タブで [その他のオプション]サブタブを選択-std=c99し、テキスト領域に配置して [ OK ] をクリックします。

これにより、コンパイラのC99モードがオンになります。

これが誰かを助けることを願っています!

于 2014-12-01T09:57:45.133 に答える
14

私もこのエラーが発生しました。

for (int i=0;i<10;i++) { ..

C89/C90規格では無効です。OysterDが言うように、あなたはする必要があります:

int i;
for (i=0;i<10;i++) { ..

元のコードは、C99以降のC言語の標準で許可されています。

于 2008-08-24T06:50:00.430 に答える
13

@Blorgbeard:

New Features in C99

  • inline functions
  • variable declaration no longer restricted to file scope or the start of a compound statement
  • several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
  • variable-length arrays
  • support for one-line comments beginning with //, as in BCPL or C++
  • new library functions, such as snprintf
  • new header files, such as stdbool.h and inttypes.h
  • type-generic math functions (tgmath.h)
  • improved support for IEEE floating point
  • designated initializers
  • compound literals
  • support for variadic macros (macros of variable arity)
  • restrict qualification to allow more aggressive code optimization

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

A Tour of C99

于 2008-08-25T11:41:45.307 に答える
6

Cの変更でコンパイルする場合

for (int i=0;i<10;i++) { ..

int i;
for (i=0;i<10;i++) { ..

C99 スイッチ セットを使用してコンパイルすることもできます。-std=c99 をコンパイル行に入れます。

gcc -std=c99 foo.c -o foo

参照: http://cplusplus.syntaxerrors.info/index.php?title= 'for'_loop_initial_declaration_used_outside_C99_mode

于 2013-04-08T05:25:12.593 に答える
2

Code::Blocks 16.01 で C99 モードを有効にする

  • [設定] -> [コンパイラ... ]に移動します。
  • Compiler settingsタブのCompiler Flagsセクションで、チェックボックス ' Have gcc follow the 1999 ISO C language standard [-std=c99] 'を選択します。
于 2019-07-29T10:57:10.660 に答える