博客
关于我
【知识】GNU C 、ANSI C、标准C、标准c++区别和联系
阅读量:481 次
发布时间:2019-03-06

本文共 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的头文件如ctimecstring等在C++中有了更新,部分名称也发生了变化。

  • 名称空间支持:ANSI C不支持名称空间,C++遵循命名空间的概念。

  • bool类型:ANSI C不支持bool,而C++引入了此类型以及truefalse关键字。

  • 函数参数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,允许聚合传递参数,个数不限。这在日志记录和调试工具中尤为常见。

  • 数组和结构体初始化:支持通过索引或范围指定顺序进行初始化,提升了代码灵活性。

  • 函数属性声明:提供多种属性选择,如noreturnformatpacked等,适用于代码优化和特定需求。

  • 内建函数:提供诸如__builtin_return_address__builtin_constant_p__builtin_expect等函数,帮助开发者实现代码特优化和调试助手。

  • 注:在目前Linux内核开发中,多数情况仍继续采用标准C,推荐使用某些特定头文件和优化手段。

    转载地址:http://ugndz.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>