今天在写代码的时候发现一个有趣的问题。我常写的for语句却在编译时报错了。下面我就贴一个相同的主要的“报错”代码,各位看官看看是哪里出错了。
#include"stdio.h"
#include"windows.h"
void main()
{
for(int i=0;i<10;i++)
{
system("start notepad");
Sleep(1000);
}
}
这串代码实现的功能是每隔一秒打开记事本程序,共打开十个记事本程序。代码看着是没问题,然而我用GCC编译的时候却报错了,错误提示如下:
In function 'main':
5:2: error: 'for' loop initial declarations are only allowed in C99 mode
5:2: note: use option -std=c99 or -std=gnu99 to compile your code
在没看错误提示之前我是很有些懵的,毕竟这么简单的语句,以前这么写也有上百上千次了,这次怎么就错了呢。于是我仔细读了读错误的提示,错误提示的第二行指出了错误的地方是在for循环的表达式1的变量声明那里,直接在for语句里声明变量的写法只能在C99模式下可用(当然现在的C11标准也是可以的)。
这里就要讲到C语言的代码规范标准问题,C语言标准目前就三个。国际标准化组织ISO在1989年制定的C89标准,1999年的C99标准,2011年的C11标准。不同的标准下C语言代码规范也是有些不同的,比如题目中C89标准下是不支持for循环中声明变量的,C99或者C11是可以的。我们也是提倡用新标准的。
如何解决这个错误呢?错误提示也给出了解决办法,用-std=c99或者-std=gnu99编译代码。于是我重新编译gcc test.c -o test.exe -std=c99(注意c要小写),这次成功编译了。当然在for语句外声明变量也是可以的。
为什么这次会报错呢?以前我用的都是IDE,而IDE默认支持C99的,我也是最近换了编译器GCC,而GCC默认是不支持C99及以上的。所以如果以后编译出错说不定是你的C标准不支持呢。
网友评论