ANSI C的标准

蓦然回首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的标准下,没有通过编译
STD=C89
(让我想到了,刚刚学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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值