现在的大学牲入校时,竟然都是用的VC6.0 这么复古的 IDE ,1989年的标准,细数到现在已经有大概30年了
学习,当然要学习新的东西,要是现在还是学那些上世纪 的旧东西,怎么能体现当代革新的精神呢?
所以在这个博文里,给大家介绍一下 什么是ANSI C ,及VC6.0 的C89与C99的区别,然后向更新的C11进发
万物都有它的标准,C语言也不例外,C的常见标准有linux c、GNU C、C51、etc,ANSI C只是其诸多标准中的一个,百科简介如下:
1983 年, 美国国家标准协会(ANSI)委任一个委员会 X3J11 对 C 语言 进行标准化。 经过长期艰苦的过程, 该委员会的工作于 1989 年 12 月 14 日正式被批准为ANSI X3.159-1989 并于 1990 年春天颁布。 当然,这个标准是用的最多最广的,它致力于C语言的标准化。
(当然,他们的差别太多太多,我只是粗略的讲讲,简单的,易见的)
想必大家成为大学牲,第一个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