本文共 1168 字,大约阅读时间需要 3 分钟。
ANSI C与标准C++的差异
RICARD STALLMAN于1983年9月27日发起的GNU计划旨在创建一套完全自由的操作系统,其中 विश отпucceeding 项注重于开发具有标准自由的代码。
ANSI C(即C99标准)与标准C++有几点显著差异:
引用与函数重载:ANSI C不支持引用类型或函数重载,这限制了其在某些复杂应用中的灵活性。
整型扩展:ANSI C引入了长整型(long long)和无符号长整型(unsigned long long),而现代C++编译器支持这些类型。
变量初始化:ANSI C不支持如int a(8);
的简写初始化方式。
结构体声明方式:ANSI C要求使用struct
关键字,而C++不需要。
头文件名称:ANSI C的头文件如ctime
、cstring
等在C++中有了更新,部分名称也发生了变化。
名称空间支持:ANSI C不支持名称空间,C++遵循命名空间的概念。
bool类型:ANSI C不支持bool
,而C++引入了此类型以及true
、false
关键字。
函数参数IMPLIED MEANING:在ANSI C中,声明为空函数参数表示接受任意数量参数,而在C++中表示不接受参数。
内联函数:ANSI C不支持内联函数(inline)。
默认参数:ANSI C不支持函数默认参数。
作用域解析操作符:ANSI C不支持作用域解析操作符(::
)。
全局常量访问:ANSI C中的const
常量具有外部链接性,而C++需要extern
关键字来实现对外部常量的链接。
GNU C在这些基础上扩展了多种功能,使其在性能和代码优化方面更具优势:
零长度数组:允许代码定义一个长度为零的数组,特别有用在某些数据结构初始化中。
case范围增强:支持case x...y
语法,覆盖范围内的所有数字,减少case语句数量。
语句表达式:允许将复合语句视为表达式,并出现在任何需要表达式位置,解决了传统宏带来的副作用问题。
typeof关键字:通过typeof
获取类型信息,帮助实现宏的重定义,减少了传统宏对变量操作的影响。
可变参数宏:比如pr_debug
,允许聚合传递参数,个数不限。这在日志记录和调试工具中尤为常见。
数组和结构体初始化:支持通过索引或范围指定顺序进行初始化,提升了代码灵活性。
函数属性声明:提供多种属性选择,如noreturn
、format
、packed
等,适用于代码优化和特定需求。
内建函数:提供诸如__builtin_return_address
、__builtin_constant_p
、__builtin_expect
等函数,帮助开发者实现代码特优化和调试助手。
注:在目前Linux内核开发中,多数情况仍继续采用标准C,推荐使用某些特定头文件和优化手段。
转载地址:http://ugndz.baihongyu.com/