美文网首页
一串for语句带来的C标准问题

一串for语句带来的C标准问题

作者: 一悠微尘 | 来源:发表于2017-04-16 16:42 被阅读0次

今天在写代码的时候发现一个有趣的问题。我常写的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标准不支持呢。

相关文章

网友评论

      本文标题:一串for语句带来的C标准问题

      本文链接:https://www.haomeiwen.com/subject/hicaattx.html