我正在尝试解决the 3n+1 problem并且我有一个for
循环,如下所示:
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
不幸的是,当我尝试使用GCC进行编译时,我收到此错误:
3np1.c:15:错误:'for'循环初始化 在C99模式之外使用的声明
我不知道C99模式是什么。有什么想法吗?
答案 0 :(得分:142)
我会尝试在循环之外声明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 here中的for循环。
答案 1 :(得分:112)
有一个编译器开关启用C99 mode,其中包括允许在for循环内声明变量。要打开它,请使用编译器开关-std=c99
或者@OysterD说,在循环外声明变量。
答案 2 :(得分:20)
要在 CodeBlocks 中切换到 C99 模式,请执行以下步骤:
单击项目/构建选项,然后在选项卡编译器设置中选择子选项卡其他选项,并在文本中放置-std=c99
区域,然后单击确定。
这将为您的编译器打开 C99 模式。
我希望这能帮助别人!
答案 3 :(得分:14)
我也遇到了这个错误。
for (int i=0;i<10;i++) { ..
在C89 / C90标准中无效。正如OysterD所说,你需要这样做:
int i;
for (i=0;i<10;i++) { ..
您的原始代码在C99及更高版本的C语言标准中是允许的。
答案 4 :(得分:13)
C99中的新功能
答案 5 :(得分:5)
如果你在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
REF:http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode
答案 6 :(得分:1)
我遇到了同样的问题,只需要在循环之外声明i
即可。
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
答案 7 :(得分:1)
对于任何尝试使用自动构建实用程序(例如 Make )从外部源编译代码的人,都可以设置环境变量来避免跟踪明确的gcc编译调用。在命令提示符下输入或放入.bashrc(或在Mac上为.bash_profile):
export CFLAGS="-std=c99"
请注意,如果遇到需要C ++ 11的C ++编译的类似情况,则可以应用类似的解决方案,您可以使用:
export CXXFLAGS="-std=c++11"
答案 8 :(得分:1)
在Code :: Blocks 16.01中启用C99模式
答案 9 :(得分:0)
对于Qt-creator:只需将下一行添加到* .pro文件...
QMAKE_CFLAGS_DEBUG = \
-std=gnu99
QMAKE_CFLAGS_RELEASE = \
-std=gnu99
答案 10 :(得分:0)
Jihene Stambouli最直接地回答了OP问题... 问题是; 为什么
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...