C99和C89

这是c0conut同学的一份作业,也可以理解为总结,为了保留这份作业,写了博客。我尽量使自己写得简单好懂有趣。

C99与C89的亲子关系

就如DOM结构一般,C99与C89之间也充满温情。老父亲C89顾名思义出生于89年,也被称为ANSI,C99出生于1999年,在C89的基础上进行发展和拓展,充分继承和发扬了Dio家的特质

C99的优秀之处(?)拒绝吹捧,人人有责

1.主流编译器基本都支持C99

举个栗子,gcc基本3.0+都支持C99(现在使用的gcc是7.3.x版本)。但是呢,众所周知,MS爹爹和C99三官不和,所以vs对C99支持比较差,从2013版本开始部分支持,到2017版本也是部分支持。

2.C99中增加了公适用于指针的restrict类型修饰符

作为初始访问指针所指对象的惟一途径。这句话也就是说,restrict只能用于指针,它指针成为唯一初始的访问对象的方式,这可以使编译器自己作出优化。

3.对编译器限制支持了

比如源程序每行要求至少支持到 4095 字节,变量名与函数名的要求支持到 63 字节 (extern 要求支持到 31)。

4.局部变长数组

举例子:

	struct love
	{int  she=1;
	int he[0];}

这里he是一个长度为0的数组,他的地址跟在love之后,如果给love分配了太多空间,多出来的就是数组he的啦。
还可以写

struct  modian
{int kill=233;
char me[];}

5.支持单行注释

6.有了bool,true,false

7.for语句内可以进行变量声明

8.复合赋值中可以指定对象类型的数组、结构或联合表达式

9.这是一个比较的表

  • 限制             C89标准  C99标准
  • 数据块的嵌套层数       15     127
  • 条件语句的嵌套层数      8      63
  • 内部标识符中的有效字符个数  31     63
  • 外部标识符中的有效字符个数  6      31
  • 结构或联合中的成员个数    127    1023
  • 函数调用中的参数个数     31     127

10.指定的初始化

举例子

int a[10]=
{
[1]=1,
[2]=2;
};

再举个例子

struct date
{
int hour,min;
}date1={min=1};

11. printf()和scanf()函数系列的增强

C99中printf()和scanf()函数系列引进了处理long long int和unsigned long long int数据类型
的特性。long long int 类型的格式修饰符是ll。
C99还引进了hh修饰符。用于指定char型变元。ll和hh修饰符均可以用于n说明符。
格式修饰符a和A用在printf()函数中时,结果将会输出十六进制的浮点数。使用A格式修饰符时,x和p必须是大写。A和a格式修饰符也可以用在scanf()函数中,用于读取浮点数。调用printf()函数时,允许在%f说明符前加上l修饰符,即%lf,但不起作用。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值