-fno-strict-aliasing 禁止依赖于严格别名规则的 优化 。严格别名规则指的是两个不相关类型的指针解引用不会相互影响,一个例外是(signed/unsigned) char指针解引用会与任何其它指针解引用互相影响。 遵守严格别名规则的话,只能使用memcpy或char*互拷 进行 数据重解析,有些 代码 实现起来性能肯...
注意const是运行期常量,constexpr是 编译器 常量。 下面的 代码 C++ 11, LINUX 4.15.0-88-generic编译结果为 0x7fff91706d98 0x7fff91706d9c 123 // 编译器 优化 123 // 编译器 优化 后面2个123是因为 编译器 加了 优化 ,看到是const和constexpr就直接把结果输出为123了。 采用g++ -O0 const1.cpp 关掉 编译器 优化 ,效果还是一样。可能有些平台上可以。 #include <iostream
想起来 ,以前最初写拷贝构造函数的时候也是跟预想的调用不一致。 记得 编译器 会自动 优化 掉临时对象的。 比如 在一个函数中 return list(); 本应该会因为创建临时对象而调用拷贝构造函数,但是 编译器 优化 掉临时对象,从而在最终结果里无法看到临时对象的拷贝构造与析构。 所以加 优化 选项 来查看结果。 在编译 选项 中添加 -fno-elide-constructors CMAKELISTS文件中添加编译 选项 的方法有: 1)add_compile.
在 C 语言中,如果要禁用 优化 ,可以使用 编译器 选项 "-O0"。例如,如果你使用 GCC 编译 C 程序,你可以使用命令 "gcc -O0 myprogram.c -o myprogram" 来编译不 进行 优化 的可执行文件。 通常, 优化 是由 编译器 在编译时 进行 的,因此如果你想要禁用 优化 ,你需要在编译时指定 "-O0" 选项 。然而,如果你想要在运行时禁用 优化 ,可能需要使用特定的函数或环境变量。你可以查看...
华为 代码 规范,适用 C/ C++ 1 概述 ................................................................................................................................................................... 5 1.1 编写目的 ........................................................................................................................................... 5 1.2 文档约定 ........................................................................................................................................... 5 1.3 预期的读者和阅读建议 ................................................................................................................... 5 1.4 参考文献 ........................................................................................................................................... 5 2 排版要求 ........................................................................................................................................................... 5 2.1 程序块缩进 ....................................................................................................................................... 5 2.2 程序块之间空行 ............................................................................................................................... 5 2.3 长语句和长表达式 ........................................................................................................................... 6 2.4 循环、判断等长表达式或语句 ....................................................................................................... 7 2.5 长参数 ............................................................................................................................................... 7 2.6 短语句 ............................................................................................................................................... 8 2.7 条件、循环语句 ............................................................................................................................... 8 2.8 语句对齐 ........................................................................................................................................... 8 2.9 函数、过程和结构等语句块 ........................................................................................................... 9 2.10 程序块分界符 ................................................................................................................................... 9 2.11 操作符前后空格 ............................................................................................................................. 10 2.12 其他 ..................................................................................................................................................11 3 注释 ..................................................................................................................................................................11 3.1 有效注释量 ......................................................................................................................................11 3.2 公司标识 ..........................................................................................................................................11 3.3 说明性文件 ..................................................................................................................................... 12 3.4 源文件头 ......................................................................................................................................... 13 3.5 函数头部说明 ................................................................................................................................. 13 3.6 注释与 代码 一致 ............................................................................................................................. 14 3.7 注释内容 ......................................................................................................................................... 14 3.8 注释缩写 ......................................................................................................................................... 14 3.9 注释位置 ......................................................................................................................................... 14 3.10 变量、常量注释 ............................................................................................................................. 15 3.11 数据结构的注释 ............................................................................................................................. 15 3.12 全局变量 ......................................................................................................................................... 16 3.13 注释缩排 ......................................................................................................................................... 16 3.14 注释与 代码 之间空行 ..................................................................................................................... 17 3.15 变量定义、分支语句 ..................................................................................................................... 17 3.16 其他 ................................................................................................................................................. 19 4 标识符命名 ..................................................................................................................................................... 20 4.1 命名清晰 ......................................................................................................................................... 20 4.2 特殊命名需注释 ............................................................................................................................. 21 4.3 命名风格保持一致 ......................................................................................................................... 21 4.4 变量命名 ......................................................................................................................................... 21 4.5 命名规范与系统风格一致 ............................................................................................................. 22 4.6 其他 ................................................................................................................................................. 22 5 可读性 ............................................................................................................................................................. 23 5.1 运算符优先级 ................................................................................................................................. 23 第 3 页 共 69 页 5.2 避免直接使用数字作为标识符 ..................................................................................................... 24 5.3 其他 ................................................................................................................................................. 24 6 变量、结构 ..................................................................................................................................................... 25 6.1 公共变量 ......................................................................................................................................... 25 6.2 公共变量说明 ................................................................................................................................. 26 6.3 公共变量访问说明 ......................................................................................................................... 26 6.4 公共变量赋值 ................................................................................................................................. 26 6.5 防止局部变量与公共变量同名。 ................................................................................................. 26 6.6 严禁使用未经初始化的变量作为右值。 ...................................................................................... 26 6.7 其他 ................................................................................................................................................. 27 7 函数、过程 ..................................................................................................................................................... 34 7.1 对所调用函数的错误返回码要仔细、全面地处理。 .................................................................. 34 7.2 明确函数功能,精确(而不是近似)地实现函数设计。 .......................................................... 34 7.3 局部变量 ......................................................................................................................................... 34 7.4 全局变量 ......................................................................................................................................... 34 7.5 接口函数参数 ................................................................................................................................. 35 7.6 其他 ................................................................................................................................................. 35 8 可测性 ............................................................................................................................................................. 44 8.1 调测开关 ......................................................................................................................................... 44 8.2 打印信息 ......................................................................................................................................... 45 8.3 单元测试 ......................................................................................................................................... 45 8.4 集成测试 ......................................................................................................................................... 45 8.5 断言使用 ......................................................................................................................................... 45 8.6 设置与取消有关测试手段时,不能影响软件功能功能 .............................................................. 48 8.7 版本维护 ......................................................................................................................................... 48 8.8 其他 ................................................................................................................................................. 48 9 程序效率 ......................................................................................................................................................... 50 9.1 编程时要经常注意 代码 的效率。 ................................................................................................. 50 9.2 提高 代码 效率 ................................................................................................................................. 50 9.3 全局效率高于局部效率 ................................................................................................................. 51 9.4 提高 代码 空间效率 ......................................................................................................................... 51 9.5 循环体内工作量最小化 ................................................................................................................. 52 9.6 其他 ................................................................................................................................................. 53 10 质量保证 ................................................................................................................................................. 56 10.1 在软件设计过程中构筑软件质量。.............................................................................................. 56 10.2 代码 质量保证优先原则 ................................................................................................................. 56 10.3 只引用属于自己的存贮空间。 ..................................................................................................... 56 10.4 防止引用已经释放的内存空间。 ................................................................................................. 56 10.5 内存及时释放 ................................................................................................................................. 57 10.6 文件句柄及时 关闭 ......................................................................................................................... 57 10.7 防止内存操作越界 ......................................................................................................................... 58 10.8 认真处理程序所能遇到的各种出错情况 ...................................................................................... 59 10.9 初始化变量 ..................................................................................................................................... 59 10.10 数据一致性检查 ............................................................................................................................. 59 10.11 严禁随意更改其它模块或系统的有关设置和配置 ...................................................................... 59 10.12 不能随意改变与其它模块的接口 ................................................................................................. 59 第 4 页 共 69 页 10.13 系统接口 ......................................................................................................................................... 59 10.14 编程时,要防止差 1 错误 ............................................................................................................. 61 10.15 操作符检查 ..................................................................................................................................... 61 10.16 分支语句写完整 ............................................................................................................................. 62 10.17 使用 return 语句 .............................................................................................................................. 62 10.18 不要滥用 goto 语句 ........................................................................................................................ 62 10.19 其他 ................................................................................................................................................. 62 11 代码 编辑、编译、审查 ......................................................................................................................... 65 11.1 打开 编译器 的所有告警开关对程序 进行 编译 .............................................................................. 65 11.2 在产品软件(项目组)中,要统一编译开关 选项 ...................................................................... 65 11.3 通过 代码 走读及审查方式对 代码 进行 检查。 .............................................................................. 65 11.4 测试部测试产品之前,应对 代码 进行 抽查及评审 ...................................................................... 65 11.5 其他 ................................................................................................................................................. 65 12 代码 测试、维护 ..................................................................................................................................... 67 12.1 单元测试要求至少达到语句覆盖 ................................................................................................. 67 12.2 单元测试开始要跟踪每一条语句,并观察数据流及变量的变化 .............................................. 67 12.3 清理、整理或 优化 后的 代码 要经过审查及测试。 ...................................................................... 67 12.4 代码 版本升级要经过严格测试 ..................................................................................................... 67 12.5 使用工具软件对 代码 版本 进行 维护.............................................................................................. 67 12.6 正式版本上软件的任何修改都应有详细的文档记录 .................................................................. 67 12.7 其他 ................................................................................................................................................. 67 13 宏 ............................................................................................................................................................. 68 13.1 用宏定义表达式时,要使用完备的括号 ...................................................................................... 68 13.2 将宏所定义的多条表达式放在大括号中 ...................................................................................... 68 13.3 使用宏时,不允许参数发生变化 ................................................................................................. 69
Intel C++ 编译器 是由英特尔公司开发的一款针对x86架构的 C++ 编译器 。它是英特尔软件开发工具套件(Intel Software Development Tools)中的一部分,旨在 优化 和提高在英特尔处理器上运行的应用程序的性能。 Intel C++ 编译器 支持多种编译 优化 技术,包括自动向量化、循环展开、函数内联和 优化 代码 生成。它还提供了对英特尔处理器特定功能和指令集的支持,可以利用处理器的并行计算能力和其他高级功能。此外,该 编译器 还与其他英特尔工具和库集成,例如英特尔数学库和英特尔性能分析工具,以帮助开发人员更好地 优化 和调试应用程序。 使用Intel C++ 编译器 可以获得更高的性能和效率,特别是在运行密集型计算任务、多线程应用程序和科学计算等方面。它适用于在Windows、Linux和macOS等操作系统上开发和构建应用程序,并且与其他主流 C++ 开发工具链兼容。