如何修复"在C99模式之外使用的for循环初始声明" GCC错误?

时间:2020-03-05 18:42:32  来源:igfitidea点击:

我正在尝试解决3n + 1问题,并且有一个for循环,如下所示:

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

        }

不幸的是,当我尝试使用GCC进行编译时,出现了此错误:

3np1.c:15: error: 'for' loop initial
  declaration used outside C99 mode

我不知道什么是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所说,在循环外声明变量。

回答

我也遇到了这个错误。

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 ++
  • 新的库函数,例如snprintf
  • 新的头文件,例如stdbool.h和inttypes.h
  • 类型通用数学函数(tgmath.h)
  • 改进了对IEEE浮点的支持
  • 指定的初始值设定项
  • 复合文字
  • 支持可变参数宏(可变Arity的宏)
  • 限制资格以允许更积极的代码优化

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

C99之旅

回答

只需在C ++模式下编译即可。我们不需要使用类来使用C ++。我基本上使用C ++作为" nicer C" :)

我几乎从不使用类,也从不使用方法覆盖。