C89与C99标准比较
1、增加restrict指针
C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元,或者指向由malloc()函数所分配的内存变量。restrict数据类型不改变程序的语义。 如果某个函数定义了两个restrict指针变元,编译程序就假定它们指向两个不同的对象,memcpy()函数就是restrict指针的一个典型应用示例。C89中memcpy()函数原型如下:
复制代码 如果s1和s2所指向的对象重叠,其操作就是未定义的。memcpy()函数只能用于不重叠的对象。 C99中memcpy()函数原型如下:
复制代码 通过使用restrict修饰s1和s2变元,可确保它们在该原型中指向不同的对象。 2、inline(内联)关键字 内联函数除了保持结构化和函数式的定义方式外,还能使程序员写出高效率的代码.函数的每次调用与返回都会消耗相当大的系统资源,尤其是当函数调用发生在重复次数很多的循环 语句中时.一般情况下,当发生一次函数调用时,变元需要进栈,各种寄存器内存需要保存.当函数返回时,寄存器的内容需要恢复。如果该函数在代码内进行联机扩展,当代码执行时,这些保存和恢复操作旅游活动会再发生,而且函数调用的执行速度也会大大加快。 函数的联机扩展会产生较长的代码,所以只应该内联对应用程序性能有显著影响的函数以及长度较短的函数。 _Bool 值是0或1。C99中增加了用来定义bool、true以及false宏的头文件夹<stdbool.h>,以便程序员能够编写同时兼容于C与C++的应用程序。在编写新的应用程序时,应该使用<stdbool.h>头文件中的bool宏。 _Complex and _Imaginary C99标准中定义的复数类型如下:float_Complex; float_Imaginary; double_Complex; double_Imaginary; long double_Complex; long double_Imaginary. <complex.h>头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和_Imaginary,因此在编写新的应用程序时,应该使用<stdbool.h>头文件中的complex和imaginary宏。 long long int C99标准中引进了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long int(0 - 2e64 - 1)。long long int能够支持的整数长度为64位。 4、对数组的增强 可变长数组 C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的. 可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的.可以变化的只是数组的大小.可以使用*来定义不确定长的可变长数组. 数组声明中的类型修饰符 在C99中,如果需要使用数组作为函数变元,可以在数组声明的方括号内使用static关键字,这相当于告诉编译程序,变元所指向的数组将至少包含指定的元素个数。也可以在数组声明的方括号内使用restrict,volatile,const关键字,但只用于函数变元。如果使用restrict,指针是初始访问该对象的惟一途径。如果使用const,指针始终指向同一个数组。使用volatile没有任何意义。 5、单行注释 7、预处理程序的修改 1、变元列表 宏可以带变元,在宏定义中用省略号(...)表示。内部预处理标识符__VA_ARGS__决定变元将在何处得到替换。例:#define MySum(...) sum(__VA_ARGS__) 语句MySum(k,m,n); 2、_Pragma运算符 3、内部编译指令 4、新增的内部宏 8、for语句内的变量声明 9、复合赋值 10、柔性数组结构成员 11、指定的初始化符 member-name(成员名称) 对结构进行指定的初始化时,允许采用简单的方法对结构中的指定成员进行初始化。例如: struct example{ int k, m, n; } object = {m = 10,n = 200}; 其中,没有初始化k。对结构成员进行初始化的顺序没有限制。 12、printf()和scanf()函数系列的增强 13、C99新增的库 C89中标准的头文件 C99新增的头文件和库 14、__func__预定义标识符 其它特性的改动 放宽的转换限制 不再支持隐含式的int规则 对返回值的约束 扩展的整数类型 对整数类型提升规则的改进C89中,表达式中类型为char,short int或int的值可以提升为int或unsigned int类型. |
C89与C99标准比较相关推荐
- C89和C99标准比较
C89和C99标准比较 原文转载自: http://blog.programfan.com/article.asp?id=14051 注: GCC支持C99, 通过 --std=c99 命令行参数开 ...
- C89和C99标准对比
GCC 支持C99,通过 --std = c99命令行参数开启. 例如:gcc --std = c99 test.c 1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰 ...
- C89 和 C99 标准比较
注1: GCC支持C99, 通过 --std=c99 命令行参数开启,如: 代码: gcc --std=c99 test.c 注2:FFMPEG使用的是C99.而VC支持的是C89(不支持C99). ...
- C89和C99标准有什么不同?
关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | 嵌入式专栏 C语言是一门经典的编程语言,经过这么多年,依然是一门很热的编程语言. 在TIOBE 编程语言排行榜中 ...
- c89与c99标准对比
GCC 支持C99,通过 --std = c99命令行参数开启. 例如:gcc --std = c99 test.c 1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰 ...
- C89 和 C99的标准比较
本文转载自: C89和C99标准比较 原文转载自: http://blog.programfan.com/article.asp?id=14051 http://blog.csdn.net/xgbi ...
- C语言三大标准C89,C99和C11
C89 标准 1983 年美国国家标准局(American National Standards Institute,简称 ANSI)成立了一个委员会,专门来制定C语言标准.1989 年C语言标准被批 ...
- c语言对c99标准声明,C语言中C89与C99的区别
1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只 有借助restrict指针表达式才能访问对象.restrict指针指针 ...
- c语言c99标准_C语言的三套标准:C89、C99和C11
我们今天使用的 Windows.Linux.Mac OS 等操作系统都是由一种叫做 Unix 的系统演化而来.Unix 作为80年代主流的操作系统,是整个软件工业的基础,是现代操作系统的开山鼻祖,C语 ...
最新文章
- 转 如何在IOS设备中去掉屏幕上的status bar
- 线性表的顺序表示和实现
- LeetCode 1516. Move Sub-Tree of N-Ary Tree(DFS)
- linux 标准 GPIO 操作
- 互联网日报 | 滴滴全球日订单首次突破5000万;抖音直播间将不支持第三方来源商品;拼多多“开学季”上线...
- awk命令和grep命令的使用
- python莫比乌斯内接矩形_莫比乌斯反演例题集 ^_^(示例代码)
- 如何使用定时器产生两路频率可调、占空比可调的PWM波
- java url 协议_Java自定义URL协议
- UNIX 环境高级编程(六)—— 程序和进程
- 无效内存引用_10.swift5-常见语法及内存管理
- NOIP2013TGDay1
- 开源OA协同办公平台使用教程:O2OA集成WPS
- caj是什么格式的文件
- 公安机关计算机网络安全协议,计算机信息网络国际联网单位网络安全协议合同范本...
- 搭建一个网站步骤 制作网页完整步骤
- java生成短网址_腾讯短链接url生成接口_url短网址生成
- 在线作图丨微生物分析——alpha多样性指数分析
- pytorch to_device遇到数据迁移不成功的问题
- 大神李沐被曝离职亚马逊,投身大模型创业!网友:“AI 已成创业致富新思路?”...
热门文章
- 手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...
- python中函数参数_Python函数的参数
- java input是什么意思_java中的【...】表示什么意思
- 光纤收发器元器件指标详情
- 【渝粤教育】国家开放大学2018年春季 0554-21T立体构成(一) 参考试题
- 【渝粤题库】国家开放大学2021春3894理工英语1题目
- 2021年春季学期期末统.考试 公司概论 试题
- 让电流检测更精确的AMR技术
- matlab写出二维数组
- (3.2)HarmonyOS鸿蒙双击事件