[C++] 编程实践之1: Google的C++代码风格9:规则特例

程序开发基础学习二(C++ Google Style 命名规则) 无规矩不成方圆,新的岗位就需要服从团队的编码规则。很开心团队用的是Google的C++编码规则,大概看了下Google 的编码规则,正如九天翔雁说的:“Google的 C++ Style Guide远不仅是一个传统意义上的代码书写风格指导,对于C++的方方面面做出了Google的 阅读详情

9. 规则特例

前面说明的编程习惯基本都是强制性的,但所有优秀的规则都允许例外,这里就是探讨这些特例。

9.1 现有不合规范的代码

对于现有不符合即定编程风格的代码可以网开一面。

当你修改使用其它风格的代码时,为了与代码原有风格保持一致可以不使用本指南约定。如果不放心可以与代码原作者或者现在的负责人商讨。记住,一致性包括原有的一致性。

9.2 Windows代码

Windows程序员有自己的编程习惯,主要源于Windows头文件和其它Microsoft代码。我们希望任何人都可以顺利读懂你的代码,所以针对所有平台的C++编程只给出一个单独的指南。

如果你习惯使用Windows编程风格,这儿有必要重申一下某些你可能会忘记的指南:

  • 不要使用匈牙利命名法(比如把整型变量命名成iNum),使用Google命名约定,包括对源文件使用.cc扩展名。
  • Windows定义了很多原生类型的同义词,例如DWORD,HANDLE等等,在调用Windows API时,这是完全可以接受甚至鼓励的,但还是尽量使用原有的C++类型,例如使用const TCHAR *而不是LPCTSTR。
  • 使用Microsoft Visual C++进行编译时,将警告级别设置为3或者更高,并将所有warnings当做errors来处理。
  • 不要使用#pragma once;而应使用Google的头文件保护规则。头文件保护的路径应该相对于项目根目录。
  • 除非万不得已,不要使用任何非标准的扩展,如 #pragma 和 __declspec. 允许使用 __declspec(dllimport) 和 __declspec(dllexport); 但你必须通过宏来使用, 比如 DLLIMPORT 和 DLLEXPORT, 这样其他人在分享使用这些代码时很容易就去掉这些扩展。

在Windows上,只有很少的一些情况下,我们可以偶尔违反规则:

  • 通常我们禁止使用多重继承,但在使用COM和ATL/WTL类时,可以使用多重继承。为了实现COM或者ATL/WTL类/接口,你可能不得不使用多重实现继承。
  • 虽然代码中不应该使用异常,但是在ATL和部分STL(包括Visual C++的STL)中异常被广泛使用。使用ATL时,应定义_ATL_NO_EXCEPTIONS 以禁用异常。你要研究一下是否能够禁用STL的异常。如果无法禁用,弃用编译器异常也可以。(注意这只是为了编译STL,自己代码里仍然不要含异常处理)
  • 通常为了利用头文件预编译,每个源文件的开头都会包含一个名为stdAfx.h或者precompile.h的文件。为了使代码方便与其他项目共享,避免显式包含此文件(precompile.cc),使用/FI编译器选项以自动包含。
  • 资源头文件通常命名为resource.h,且只包含宏的,不需要遵守本风格指南。

结束语

运用常识和判断力,并保持一致,因为代码风格也是一种谨慎的权衡过程。

编辑代码时,花点时间看看项目中其它代码,并熟悉其风格。如果其它代码中if语句使用空格,那么你也要使用。如果其中的注释用星号围成一个大盒子状,那么你同样要这么做。

风格指南的重点在于提供一个通用的编程规范,这样大家可以把精力集中在实现内容而不是表现形式上。我们展示了全局的风格规范,但局部风格也很重要,如果你在一个文件中新加的代码和原有代码风格相去甚远,这就破坏了文件本身的整体美观,也影响阅读,所有要尽量避免。

好了,关于编码风格写的够多了;代码本身才更有趣,尽情享受吧!

C++项目代码风格统一:Google C++ Style与Clang-Format配置实战 在C++项目开发中,代码风格一致性是提升团队协作效率和代码可维护性的关键。Google C++风格指南作为业界广泛采用的编码规范,通过定义明确的格式规则,旨在减少开发者在代码审查中的无谓争论。其核心原理在于将主观的风格偏好转化为客观、可自动执行的规则。自动化代码格式化工具Clang-Format正是实现这一目标的技术载体,它基于LLVM的语法分析能力,能够智能地解析代码结构并按照预设配置重新排版。从技术价值看,自动化格式化不仅强制执行统一标准,更能将开发者从繁琐的格式调整中解放出来,专注于核心逻辑。在工程实 阅读详情

相关推荐

Google CEL-CPP:安全高效的C++表达式语言,构建动态规则引擎

表达式语言是一种用于动态计算和逻辑判断的领域特定语言,它允许程序在运行时解析和执行外部输入的代码片段,而无需修改和重新编译主程序。其核心原理在于将字符串形式的表达式解析为抽象语法树,并在一个受控的沙箱环境中进行类型检查和求值,从而在灵活性和安全性之间取得平衡。这种技术的核心价值在于实现了业务逻辑的动态化与配置化,极大地提升了系统的可扩展性和运维效率。在工程实践中,它被广泛应用于需要动态策略的场景,例如风控系统的实时规则判断、微服务网关的请求路由决策、低代码平台的自定义计算逻辑以及游戏服务器的行为验证等。Go

weixin_34341229的博客 385

C++ Google代码风格

C++ Google代码风格0 index(扉页)0.0 声明0.1 译者前言0.2 背景headers(头文件)1.1 Self-contained 头文件1.2. #define 保护1.3. 前置声明1.4. 内联函数1.5. #include 的路径及顺序译者(acgtyrant)笔记scoping(作用域)2. 作用域2.1. 命名空间2.2. 匿名命名空间和静态变量2.3. 非成员函数...

baidu_28926495的博客 1623

Google Cpp Guide

本文章主要记录内容讲解。未完成,还在持续更新…

KingOfMyHeart的博客 608

Google C++ Style文档及常用代码规范(三):来自 Google 的奇技、其他 C++ 特性、规则特例、结束语

风格指南的重点在于提供一个通用的编程规范, 这样大家可以把精力集中在实现内容而不是表现形式上. 我们展示的是一个总体的的风格规范, 但局部风格也很重要, 如果你在一个文件中新加的代码和原有代码风格相去甚远, 这就破坏了文件本身的整体美观, 也让打乱读者在阅读代码时的节奏, 所以要尽量避免.不是标准 C++ 的组成部分. 更重要的是, 它们根据数据大小动态分配堆栈内存, 会引起难以发现的内存越界 bugs: “在我的机器上运行的好好的, 发布后却莫名其妙的挂掉了”.所以拿不准时,干脆用更大的类型。

MAVER1CK的博客 1299

C++:C++代码风格指南--Google(未完待续)

所谓「前置声明」(forward declaration)是类、函数和模板的纯粹声明,没伴随着其定义.

weiweiqiao的专栏 413

Codex辅助小说创作:零成本AI写作指南与实战技巧

自然语言处理技术通过深度学习模型理解语义上下文,其核心原理是基于大规模文本训练的语言模型预测能力。在创意写作领域,这项技术的价值在于突破传统写作工具的功能局限,实现从内容生成到风格模仿的智能化辅助。特别是提示词工程的应用,让创作者能够精准控制AI输出的内容和风格。在实际应用场景中,AI写作工具显著降低了小说创作门槛,适用于网络小说、奇幻科幻等多种文学类型。本文以OpenAI Codex为例,详细解析如何利用AI技术完成从故事大纲设计、章节生成到平台发布的全流程创作,其中提示词优化和内容质量把控是提升生成效果

weixin_32678995的博客 561

Google C++编程规范 (中文版)

点击下面的超级链接即可: Google 开源项目风格指南  C++ 风格指南 - 内容目录 0. 扉页 0.1 译者前言 0.2 背景 1. 头文件 1.1. Self-contained 头文件 1.2. #define 保护 1.3. 前置声明 1.4. 内联函数 1.5. #include 的路径及顺序 译者 (YuleFox) 笔...

Hhrock的博客 3万+

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 298

9. 规则特例

9. 规则特例¶<br />前面说明的编程习惯基本都是强制性的. 但所有优秀的规则都允许例外, 这里就是探讨这些特例.9.1. 现有不合规范的代码¶<br />Tip<br />对于现有不符合既定编程风格的代码可以网开一面.<br />当你修改使用其他风格的代码时, 为了与代码原有风格保持一致可以不使用本指南约定. 如果不放心可以与代码原作者或现在的负责人员商讨, 记住, 一致性 包括原有的一致性.9.2. Windows 代码¶<br />Tip<br />Windows 程序员有自己的编程习惯, 主要源

Richarll的专栏 754

基础的pdf病毒木马

基础的pdf病毒木马 环境: 攻击机:Kali 目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件) 目标软件:Adobe Reader 8.1.2 msf框架搜索:adobe-pdf 1.打开msfconsole 2.搜索 adobe_pdf模块 3.加载攻击模块并设置payload 4.运行生成pdf 5.将pdf拖入到win10 6.打开msf,加...

小小猪的博客 4623

Simulink仿真模块 -Scope

如果您将 Scope 模块放在具有锁定链接的库或者锁定的库中,当尝试打开示波器窗口时,Simulink 会显示错误。要显示某个库模块中的内部数据,请为库模块添加一个输出端口,然后将此端口连接到您模型中的 Scope 模块。当您在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。当在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。如果在仿真开始时波形视图关闭,则当在仿真后打开波形视图时,波形视图将显示附加的输入信号的仿真结果。

jk_101的博客 3789

Abseil代码风格指南:Google C++代码规范的实践

在现代软件开发中,代码风格一致性是保证项目可维护性和可读性的关键因素。Google的C++代码规范被业界广泛认可,而Abseil库正是这一规范的完美实践。作为Google内部C++代码库的开源版本,Abseil不仅提供了高质量的C++组件,更展示了如何在实际项目中应用Google的代码风格规范。 本文将深入解析Abseil代码库中的风格实践,帮助开发者理解和应用这些最佳实践。 ## 命名约定:...

gitblog_00685的博客 984

PCL 贪婪投影三角剖分算法【2025最新版】

本博客在学习PCL中的贪婪投影三角算法的基础上,实现了使用彩色点云重建彩色模型的应用案例。博客长期更新,最近一次更新时间为:2025年7月6日。

点云侠的博客 37万+

LevelDB设计模式:Google C++代码风格深度解析 [特殊字符]

LevelDB是Google开发的一个高性能键值存储库,采用Google C++代码风格构建。这个开源项目展示了Google内部代码标准的最佳实践,为C++开发者提供了极好的学习范例。本文将深入解析LevelDB的设计模式和代码风格特点。 ## Google C++代码风格的核心原则 LevelDB严格遵循[Google C++代码风格指南](https://google.github.io/

gitblog_00077的博客 1093

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境

jks212454的博客 4189

12027.linux flash驱动之IS25LP01G/IS25WWP01G

一页:512字节 --> 扇区 4096字节 --> 块 32k,64k, 层层递进关系。

写给自己的笔记 2289

google代码风格(C++)

from    http://code.google.com/p/google-styleguide/   版本:   3.133 原作者: Benjy Weinberger Craig Silverstein Gregory Eitzmann Mark Mentovai Tashana Landray 翻译: YuleFox yospaly 项目主页:

昨天的你 4010

Open3D (C++) KD tree的使用【2025最新版】

Open3D (C++) KD tree的使用,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 1566

【整理】Google代码风格(C++)——规则特例、结束语

from http://code.google.com/p/google-styleguide/ 版本: 3.133 原作者: Benjy Weinberger Craig Silverstein Gregory Eitzmann Mark Mentovai Tashana Landray 翻译: YuleFox yospaly 项目主页: Google Style ...

盐与黑胡椒的博客 541

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Google C++编程风格指南

  [译]Google C++编程风格指南(八)[完] 2008年09月03日 星期三 17:06 原文地址:Google C++ Style Guide 规则之例外前面说明的编码习惯基本是强制性的,但所有优秀的规则都允许例外。1. 现有不统一代码(Existing Non-conformant 阅读全文>> 类别:c

skyremember的专栏 1234

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Google C++ Style Guide 谷歌 C++编码风格指南,深入理解华为与谷歌的编程规范——C和C++实践指南

来看,return;(比如刷新 log),您可以把它绑定到 _at_quick_exit(). 如果您想在 exit() 和 quick_exit() 都用上该 handler, 都。Tip: 使用 C++ 的类型转换, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等转换方式;TextQuery::TextQuery(std::string word) : word_(word) {} , 其中 word_ 自然是类内私有成员。

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 1388

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[C++] 编程实践之1: Google的C++代码风格8:格式

8. 格式 8.1 行长度 8.2 非ASCII字符 8.3 空格还是制表位 8.4 函数声明与定义 8.5 Lambda表达式 8.6 函数调用 8.7 列表初始化格式 8.8 条件语句 8.9 循环和开关选择语句 8.10 指针和引用表达式 8.11 布尔表达式 8.12 函数返回值 8.13 变量及数组初始化

魔豆(Magicbean)的博客 1777

Google C++编程风格指南:cpplint报错信息解决汇总

Google C++编程风格指南:cpplint报错信息解决汇总

LF__plus的博客 2601

Google的C++编程规范总结

文章目录引言1 格式1.1 每行代码不多于 80 个字符1.2 使用空格(Space),而不是制表符(Tab)来缩进,每次缩进4个字符1.3 指针符号*,引用符号& 的位置,写在靠近类型的地方1.4 花括号位置1.5 if, for, while等语句就算只有一行,也强制使用花括号2 命名约定2.1 使用英文单词,不能夹着拼音2.2 总体上采用骆驼命名法2.3 名字不要加类型前缀2.4 类...

蒋成的博客 5262

C语言Google代码风格整理

想要写出整洁的代码就不得不遵循某种特定规范,在这篇文章中整理了C语言的Google代码规范。推荐刚刚接触代码的新手或是已经入门但是苦于代码编写风格的开发者阅读。

Reed_redd的博客 1197

Google C++项目命名约定

系列文章目录 文章目录系列文章目录前言一、命名约定二、通用命名规则1.总述2.读入数据总结 前言 一、命名约定 最重要的一致性规则是命名管理,命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义: 类型, 变量, 函数, 常量, 宏, 等等, 甚至. 我们大脑中的模式匹配引擎非常依赖这些命名规则。 命名规则具有一定随意性, 但相比按个人喜好命名, 一致性更重要, 所以无论你认为它们是否重要, 规则总归是规则。 二、通用命名规则 1.总述 函数命名, 变量命名, 文件命名要.

森明帮大于黑虎帮的博客 1168
上一篇: [C++] 编程实践之1: Google的C++代码风格8:格式
下一篇: [Leetcode] 83. Remove Duplicates from Sorted List 解题报告
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值