如何修复“在C99模式外使用循环初始声明”GCC错误?

我试图解决3n + 1的问题 ,我有一个for循环,看起来像这样:

 for(int i = low; i <= high; ++i) { res = runalg(i); if (res > highestres) { highestres = res; } } 

不幸的是,当我尝试使用GCC编译时遇到了这个错误:

3np1.c:15:error:'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语言的循环。

有一个编译器开关启用了C99模式 ,除此之外允许在for循环中声明一个variables。 要打开它,使用编译器开关-std=c99

或者像@OysterD所说的那样,在循环之外声明variables。

我也得到了这个错误。

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

在C89 / C90标准中无效。 正如OysterD所说,你需要做的是:

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

您的原始代码允许使用C99及更高版本的C语言标准。

@Blorgbeard :

C99的新function

  • 内联函数
  • variables声明不再局限于文件范围或复合语句的开始
  • 几种新的数据types,包括long long int,可选的扩展整数types,显式布尔型数据types和复数types来表示复数
  • 可变长度数组
  • 支持以//开头的单行注释,如BCPL或C ++
  • 新的库函数,如snprintf
  • 新的头文件,如stdbool.h和inttypes.h
  • types通用math函数(tgmath.h)
  • 改进了对IEEE浮点的支持
  • 指定的初始化器
  • 复合文字
  • 支持可变macros(macros可变)
  • 限制资格以允许更积极的代码优化

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

C99旅游

要在CodeBlocks中切换到C99模式,请执行以下步骤:

点击Project / Build选项 ,然后在选项卡Compiler Settings中select子选项Other options ,并在文本区域中放置-std=c99 ,然后单击Ok

这将为您的编译器打开C99模式。

我希望这会帮助别人!

如果你在C编译改变

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

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

您也可以使用C99开关组进行编译。 在编译行中input-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

对于Qt创build者:只需添加下一行* .pro文件…

 QMAKE_CFLAGS_DEBUG = \ -std=gnu99 QMAKE_CFLAGS_RELEASE = \ -std=gnu99 

我有同样的问题,它的工作,你只需要在循环之外声明i

 int i; for(i = low; i <= high; ++i) { res = runalg(i); if (res > highestres) { highestres = res; } } 

只需在C ++模式下编译。 你不需要使用类来使用C ++。 我基本上使用C ++作为“更好的C”:)

我几乎从不使用类,也不使用方法过度。