如何修复“在C99模式外使用循环初始声明”GCC错误?
我试图解决3n + 1的问题 ,我有一个for
循环,看起来像这样:
for(int i = low; i <= high; ++i) { res = runalg(i); if (res > highestres) { highestres = res; } }
不幸的是,当我尝试使用GCC编译时遇到了这个错误:
3np1.c:15:error:'for'循环初始声明在C99模式之外使用
我不知道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语言的循环。
有一个编译器开关启用了C99模式 ,除此之外允许在for循环中声明一个variables。 要打开它,使用编译器开关-std=c99
或者像@OysterD所说的那样,在循环之外声明variables。
我也得到了这个错误。
for (int i=0;i<10;i++) { ..
在C89 / C90标准中无效。 正如OysterD所说,你需要做的是:
int i; for (i=0;i<10;i++) { ..
您的原始代码允许使用C99及更高版本的C语言标准。
@Blorgbeard :
C99的新function
- 内联函数
- variables声明不再局限于文件范围或复合语句的开始
- 几种新的数据types,包括long long int,可选的扩展整数types,显式布尔型数据types和复数types来表示复数
- 可变长度数组
- 支持以//开头的单行注释,如BCPL或C ++
- 新的库函数,如snprintf
- 新的头文件,如stdbool.h和inttypes.h
- types通用math函数(tgmath.h)
- 改进了对IEEE浮点的支持
- 指定的初始化器
- 复合文字
- 支持可变macros(macros可变)
- 限制资格以允许更积极的代码优化
http://en.wikipedia.org/wiki/C99
C99旅游
要在CodeBlocks中切换到C99模式,请执行以下步骤:
点击Project / Build选项 ,然后在选项卡Compiler Settings中select子选项卡Other options ,并在文本区域中放置-std=c99
,然后单击Ok 。
这将为您的编译器打开C99模式。
我希望这会帮助别人!
如果你在C编译改变
for (int i=0;i<10;i++) { ..
至
int i; for (i=0;i<10;i++) { ..
您也可以使用C99开关组进行编译。 在编译行中input-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
对于Qt创build者:只需添加下一行* .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; } }
只需在C ++模式下编译。 你不需要使用类来使用C ++。 我基本上使用C ++作为“更好的C”:)
我几乎从不使用类,也不使用方法过度。
- Visual Studio:debugging一个被引用的DLL,我在另一个SLN有源代码
- 尝试方法'System.Web.Helpers.Json..cctor()'来访问方法'System.Web.Helpers.Json.CreateSerializer()'失败
- 如何制作只能在系统托盘中运行的.NET Windows窗体应用程序?
- 我可以用什么来代替箭头运算符,` – >`?
- C / C ++:切换为非整数
- 使用枚举内部types – 编译器警告C4482 C ++
- 何时使用addressof(x)而不是&x?
- 有没有公共数据结构的开源C库?
- .NET – 获取reflection的PropertyInfo的默认值