资源描述:
《C99标准 最新.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、最新C99标准的新特性在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,NormativeAmendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年三月采用。在C99中包括的特性有:·对编译器限制增加了,比如源程序每行要求至少支持到4095字节,变量名函数名的要求支持到63字节(extern要求支
2、持到31)·预处理增强了。例如:o宏支持取参数#defineMacro(...)__VA_ARGS__o使用宏的时候,参数如果不写,宏里用#,##这样的东西会扩展成空串。(以前会出错的)o支持//行注释(这个特性实际上在C89的很多编译器上已经被支持了)·增加了新关键字restrict,inline,_Complex,_Imaginary,_Boolo支持longlong,longdouble_Complex,float_Complex这样的类型·支持<: :><%%>%:%:%:,等等奇怪的符号替代
3、,D&E里提过这个·支持了不定长的数组。数组的长度就可以用变量了。声明类型的时候呢,就用inta[*]这样的写法。不过考虑到效率和实现,这并不是一个新类型。所以就不能用在全局里,或者structunion里面,如果你用了这样的东西,goto语句就受限制了。·变量声明不必放在语句块的开头,for语句提倡这么写for(inti=0;i<100;++i)就是说,inti的声明放在里面,i只在for里面有效。(VC没有遵守这条标准,i在for外也有效)·当一个类似结构的东西需要临时构造的时候,可以用(type
4、_name){xx,xx,xx}这有点像C++的构造函数·初始化结构的时候现在可以这样写:struct{inta[3],b;}hehe[]={[0].a={1},[1].a=2};struct{inta,b,c,d;}hehe={.a=1,.c=3,4,.b=5}//3,4是对.c,.d赋值的·字符串里面,u支持unicode的字符·支持16进制的浮点数的描述·所以printfscanf的格式化串多支持了ll/LL(VC6里用的I64)对应新的longlong类型。·浮点数的内部数据描述支持了新标准
5、,这个可以用#pragma编译器指定·除了已经有的__line__,__file__以外,又支持了一个__func__可以得到当前的函数名·对于非常数的表达式,也允许编译器做化简·修改了对于/%处理负数上的定义,比如老的标准里-22/7=-3,-22%7=-1而现在-22/7=-4,-22%7=6·取消了不写函数返回类型默认就是int的规定·允许struct定义的最后一个数组写做[]不指定其长度描述·constconstinti;将被当作constinti;处理·增加和修改了一些标准头文件,比如定义b
6、ool的定义一些标准长度的int的定义复数的定义宽字符的有点泛型味道的数学函数跟浮点数有关的。里多了一个va_copy可以复制...的参数。里多了个structtmx对structtm做了扩展·输入输出对宽字符还有长整数等做了相应的支持但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软
7、和Borland却似乎对此不感兴趣。在C99中运算符号()[]->. !++--(cast) 括号、成员、逻辑非、自加、自减、强制转换++--*&~ !+-sizeof 单目运算符*/%算术运算符+- 算术运算符<<>>位运算符<<=>>=关系运算符== !=关系运算符号&位与^位异或
8、位或&&逻辑与
9、
10、逻辑或 ?:条件运算符= += -= *= /= %= <<= >>= &=
11、= ^=赋值运算符,顺序运算符