“我该如何解决?”;对于在C99模式之外使用的循环初始声明;GCC错误?
我正在尝试求解,我有一个for循环,如下所示:“我该如何解决?”;对于在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(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...