欢迎来到天天文库
浏览记录
ID:11237897
大小:274.00 KB
页数:59页
时间:2018-07-10
《c语言经典源码大全》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、【新标准】 在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,NormativeAmendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年3月采用。 在C99中包括的特性有: 对编译器限制增加了,比如源程序每行要求至少支持到4095字节,变量名函数名的要求支持到63字节(extern要求支持到31) 预处理
2、增强了。例如: 宏支持取参数#defineMacro(...)__VA_ARGS__ 使用宏的时候,参数如果不写,宏里用#,##这样的东西会扩展成空串。(以前会出错的) 支持//行注释(这个特性实际上在C89的很多编译器上已经被支持了) 增加了新关键字restrict,inline,_Complex,_Imaginary,_Bool 支持longlong,longdouble_Complex,float_Complex这样的类型 支持<::><%%>%:%:%:,等等奇怪的符号替代 支持了不定长的数组。数
3、组的长度就可以用变量了。声明类型的时候呢,就用inta[*]这样的写法。不过考虑到效率和实现,这玩意并不是一个新类型。所以就不能用在全局里,或者structunion里面,如果你用了这样的东西,goto语句就受限制了。 变量声明不必放在语句块的开头,for语句提倡这么写for(inti=0;i<100;++i)就是说,inti的声明放在里面,i只在for里面有效。(VC没有遵守这条标准,i在for外也有效) 当一个类似结构的东西需要临时构造的时候,可以用(type_name){xx,xx,xx}这有点像C++的构造
4、函数 初始化结构的时候现在可以这样写: struct{inta[3],b;}hehe[]={[0].a=,[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类型。 浮点数的内部数据描述支持了新标准,这个可以用#pragma编译器指定 除了已经有的__l
5、ine____file__以外,又支持了一个__func__可以得到当前的函数名 对于非常数的表达式,也允许编译器做化简 修改了对于/%处理负数上的定义,比如老的标准里-22/7=-3,-22%7=-1而现在-22/7=-4,-22%7=6 取消了不写函数返回类型默认就是int的规定 允许struct定义的最后一个数组写做[]不指定其长度描述 constconstinti;将被当作constinti;处理 增加和修改了一些标准头文件,比如定义bool的定义一些标准长度的int的6、types.h>定义复数的定义宽字符的有点泛型味道的数学函数跟浮点数有关的。里多了一个va_copy可以复制...的参数。里多了个structtmx对structtm做了扩展 输入输出对宽字符还有长整数等做了相应的支持 相对于c89的变化还有 1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的唯一途径,因此只有借助restrict指针表达7、式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。 如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下: 代码:void*memcpy(void*s1,constvoid*s2,size_tsize); 如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于8、不重叠的对象。C99中memcpy()函数原型如下:代码:void*memcpy(void*restricts1,constvoid*restricts2,size_tsize); 通过使用restrict修饰s1和s2变元,可确保它们在该原型中指向不同的对象。 2、inline(内联)关键字 内联函数除了保持结构化和函数式
6、types.h>定义复数的定义宽字符的有点泛型味道的数学函数跟浮点数有关的。里多了一个va_copy可以复制...的参数。里多了个structtmx对structtm做了扩展 输入输出对宽字符还有长整数等做了相应的支持 相对于c89的变化还有 1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的唯一途径,因此只有借助restrict指针表达
7、式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。 如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下: 代码:void*memcpy(void*s1,constvoid*s2,size_tsize); 如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于
8、不重叠的对象。C99中memcpy()函数原型如下:代码:void*memcpy(void*restricts1,constvoid*restricts2,size_tsize); 通过使用restrict修饰s1和s2变元,可确保它们在该原型中指向不同的对象。 2、inline(内联)关键字 内联函数除了保持结构化和函数式
此文档下载收益归作者所有