“我该如何解决?”;对于在C99模式之外使用的循环初始声明;GCC错误?

“我该如何解决?”;对于在C99模式之外使用的循环初始声明;GCC错误?,c,gcc,for-loop,C,Gcc,For Loop,我正在尝试求解,我有一个for循环,如下所示: for(int i = low; i <= high; ++i) { res = runalg(i); if (res > highestres) { highestres = res; } } for(int i=low;i

我正在尝试求解,我有一个for循环,如下所示:

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

        }
for(int i=low;i highestres)
{
highestres=res;
}
}
不幸的是,我在尝试使用GCC编译时遇到了以下错误:

3np1.c:15:错误:“for”循环初始值 在C99模式之外使用的声明


我不知道C99模式是什么。有什么想法吗?

我会尝试在循环之外声明
I

祝你在解决3n+1:-)时好运

下面是一个例子:

#包括
int main(){
int i;
/*for循环执行*/
对于(i=10;i<20;i++){
printf(“i:%d\n”,i);
}   
返回0;
}

阅读更多关于C中for循环的内容。

有一个编译器开关,它启用for循环,其中包括允许在for循环中声明变量。要打开它,请使用编译器开关
-std=c99


或者正如@Oysted所说,在循环外声明变量。

我也遇到了这个错误

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

C99的新功能

  • 内联函数
  • 变量声明不再局限于文件范围或复合语句的开头
  • 几个新的数据类型,包括long-long-int、可选的扩展整数类型、显式布尔数据类型和表示复数的复数类型
  • 可变长度数组
  • 支持以//开头的单行注释,如在BCPL或C中++
  • 新的库函数,如snprintf
  • 新的头文件,如stdbool.h和inttypes.h
  • 键入泛型数学函数(tgmath.h)
  • 改进了对IEEE浮点的支持
  • 指定初始值设定人
  • 复合文字
  • 支持可变宏(可变算术的宏)
  • 限制限定以允许更积极的代码优化


如果用C语言编译,请更改

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

参考:对于Qt creator,在C99模式之外使用的“循环”初始声明:只需将下一行添加到*.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;
        }

}
inti;
用于(i=低;i高)
{
highestres=res;
}
}
要在代码块中切换到C99模式,请执行以下步骤:

单击“项目/生成选项”,然后在“编译器设置”选项卡中选择“子选项卡”“其他选项”,并将
-std=c99
放置在文本区域中,然后单击“确定”

这将为编译器打开C99模式


我希望这会对某些人有所帮助!

对于任何试图从使用Make等自动生成实用程序的外部源代码编译代码的人,为了避免跟踪显式gcc编译调用,您可以设置一个环境变量。在命令提示符下输入或输入.bashrc(或Mac上的.bash_profile):

注意,如果你使用C++编译11的C++编译,你可以使用类似的方案:

export CXXFLAGS="-std=c++11"

Jihene Stambouli最直接地回答了OP的问题。。。 问题是,; 为什么

答案是

for(int i = low...
应该是

int i;
for (i=low...

在Code::Blocks 16.01中启用C99模式

  • 转到设置->编译器…
  • 编译器设置选项卡的编译器标志部分,选中复选框“让gcc遵循1999年ISO C语言标准[-std=c99]”

对于gcc,抛出一个“-std=c99”。有关其他功能,请参见Imran的回答。是的,它是有效的C;它只是无效的C89/C90。@KeithThompson:澄清。您仍然说它不是有效的C,只是有一个限定条件。它是完全有效的C;1999标准取代并取代了1990标准,2011标准取代并取代了1999标准(虽然后者在你最初发布这个答案时不存在)。@ KeththoppsOn,这不是我所说的。你会考虑“在C89/C90标准中无效”吗?实际上,STD= GNU99可能是更理想的,因为这样你仍然可以获得GCC扩展。(gcc默认为-std=gnu89,但在接下来的几个版本中,它将在某个时候更改为gnu99)@Spudd86:是否要启用gcc扩展取决于您正在执行的操作。如果您的目标是编写可移植到gcc以外的编译器的代码,则禁用它们会很有帮助。那么为什么不改用while loop?@ErikW您的问题非常糟糕这在其他编译器选项下的codeblocks 16.1中有所帮助!尽管我使用了
-std=gnu99
如上面的一些答案所述!但这暂时有帮助!我每次编译代码时都必须这样做!…(不,您没有!每个新项目只能这样做一次。
export CFLAGS="-std=c99"
export CXXFLAGS="-std=c++11"
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...