蓦然回首C语言系列——ANSI C的标准
前面的话
现在的大学牲入校时,竟然都是用的VC6.0 这么复古的 IDE ,1989年的标准,细数到现在已经有大概30年了
学习,当然要学习新的东西,要是现在还是学那些上世纪 的旧东西,怎么能体现当代革新的精神呢?
所以在这个博文里,给大家介绍一下 什么是ANSI C ,及VC6.0 的C89与C99的区别,然后向更新的C11进发
什么是ANSI C
万物都有它的标准,C语言也不例外,C的常见标准有linux c、GNU C、C51、etc,ANSI C只是其诸多标准中的一个,百科简介如下:
1983 年, 美国国家标准协会(ANSI)委任一个委员会 X3J11 对 C 语言 进行标准化。 经过长期艰苦的过程, 该委员会的工作于 1989 年 12 月 14 日正式被批准为ANSI X3.159-1989 并于 1990 年春天颁布。
当然,这个标准是用的最多最广的,它致力于C语言的标准化。
C89与C99
(当然,他们的差别太多太多,我只是粗略的讲讲,简单的,易见的)
main
想必大家成为大学牲,第一个C就是hello world
main ()
{
printf ("hello world!");
}
这个程序在Vc6.0(C89 )下很简单的通过了编译
然而在C99的标准下,没有通过编译
(让我想到了,刚刚学C时的无敌的Bug..哈哈)
原因就是标准不同
在最新的 C99 标准中,只有以下两种定义方式是正确的:
int main( void ) /* 无参形式 */
{
something...
return 0;
}
int main( int argc, char **argv)/*带参形式*/
{
something...
return 0;
}
int指明了main()函数的返回值类型,函数名后面的圆括号一般包含传递给函数的信息。void表示没有给函数传递参数。
所以在我们自己的hello world中,将会发现程序常常以。
main() 这种形式开始。C89标准允许这种形式,但是C99标准不允许。因此即使你当前的编译器允许,也不要这么写。
你还可能看到过另一种形式。
void main() 有些编译器允许这种形式,但是还没有任何标准考虑接受它。
void main( ) 的定义从来就不存在于 C++ 或者 C . —-C++ 之父 Bjarne Stroustrup
所以,编译器不必接受这种形式,并且很多编译器也不允许这么写。
我们坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时,照样能正常运行。
变量的定义
“C语言的变量定义只能放在最前面!”学长对懵逼的我大喊道…..
心中暗想到,用的时候再定义,不是更明了简介??
哈哈,事实就是这样,这个能否又是涉及到了C标准的问题,看例子:
code:
int i = 0 ;
//something...
for (i=0;i<9;i++) //这样,i隔太远的话,再加之定义不明确的话,我不会记得i的..
printf("%d",i);
code:
for (int i=0;i<9;i++) //这样的话是不是显得得体简介?需要的时候再定义!
printf("%d",i);
所以在C99中,引入了这样的使用,实属不错!
当然,C89中是不能通过的
另外,这些变量的作用范围只有for语句中,用后这些变量将会被回收方便省力~
当然,C89和C99的差别远不止如此,我只是提出了最常见的,新手没最容易遇到的两点
结语
学习是点滴积累的过程,一点点的积累,后来收获总是会有的1