我正在尝试解决3n + 1问题,并且有一个for循环,如下所示:
1 2 3 4 5 6 7 8 9
| 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 :-)
这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %d
", i);
}
return 0;
} |
在此处阅读有关C语言中for循环的更多信息。
有一个启用C99模式的编译器开关,除其他功能外,它还允许在for循环内声明变量。要打开它,请使用编译器开关-std=c99
或如@OysterD所说,在循环外声明变量。
要在CodeBlocks中切换到C99模式,请执行以下步骤:
单击"项目/构建选项",然后在"编译器设置"选项卡中选择"其他选项"子选项卡,并将-std=c99放置在文本区域中,然后单击"确定"。
这将为您的编译器打开C99模式。
我希望这会对某人有所帮助!
我也遇到了这个错误。
1
| for (int i=0;i<10;i++) { .. |
在C89 / C90标准中无效。正如OysterD所说,您需要执行以下操作:
1 2
| 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语言中进行编译
1
| for (int i=0;i<10;i++) { .. |
至
1 2
| int i;
for (i=0;i<10;i++) { .. |
您也可以使用C99开关套件进行编译。将-std = c99放在编译行中:
1
| gcc -std=c99 foo.c -o foo |
参考:http://cplusplus.syntaxerrors.info/index.php?title='for'_loop_initial_declaration_used_outside_C99_mode
对于任何尝试从使用自动生成实用程序(例如Make)的外部源编译代码的人,为了避免必须跟踪显式gcc编译调用,可以设置环境变量。在命令提示符下输入或放入.bashrc(或在Mac上为.bash_profile):
1
| export CFLAGS="-std=c99" |
请注意,如果遇到需要C ++ 11的C ++编译的类似情况,则可以应用类似的解决方案,您可以使用:
1
| export CXXFLAGS="-std=c++11" |
在Code :: Blocks 16.01中启用C99模式
-
转到设置->编译器...
-
在"编译器设置"选项卡的"编译器标志"部分中,选中"使gcc遵循1999 ISO C语言标准[-std = c99]"复选框。
Jihene Stambouli最直接地回答了OP问题...
问题是;
为什么
1 2 3 4 5 6 7 8
| for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
} |
产生错误;
1
| 3np1.c:15: error: 'for' loop initial declaration used outside C99 mode |
答案是
应该
我遇到了同样的问题,只需要在循环外部声明i,它就可以工作:
1 2 3 4 5 6 7 8 9 10 11 12
| int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
} |
对于Qt-creator:只需将下一行添加到* .pro文件中...
1 2 3 4 5
| QMAKE_CFLAGS_DEBUG = \
-std=gnu99
QMAKE_CFLAGS_RELEASE = \
-std=gnu99 |