[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

深度学习PyTorch代码模板——模型训练框架、数据处理、绘图…

个人用深度学习代码模板:模型训练框架、数据处理、绘图等。待补充。

https://www.hyperplasma.top 1905

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万+

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 227

9. 规则特例

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

Richarll的专栏 754

蓝牙开发那些事之ceva controller代码解读

对比ceva的经典蓝牙和ble的controller在软件上的差异点

袁赟的博客 1089

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 725

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

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

gitblog_00685的博客 984

从零搭建 AI 运维 Agent:告警自动诊断 + 修复的完整技术方案

适合读者:管理 5-50 台服务器的运维/SRE 工程师、技术负责人 技术栈:FastAPI + React + PostgreSQL + Redis + DeepSeek 关键词:AI运维、AIOps、自动化运维、智能告警、告警修复、Runbook自动化、DevOps、SRE、DeepSeek运维

weixin_38359457的博客 1640

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

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

gitblog_00077的博客 1093

零基础入门simulink1000例--第112例:在 Simulink 中构建一个基本的相控阵雷达波束形成系统仿真模型

摘要:本文详细介绍了使用Simulink实现相控阵雷达波束形成技术的完整流程。从创建Simulink模型、设计天线阵列、信号生成,到波束形成算法实现和结果可视化,涵盖了关键步骤。文章重点讲解了均匀线性阵列的设计、线性调频信号生成、相位偏移计算等核心技术,并提供了MATLAB代码示例。通过Scope或ArrayPlot模块进行结果分析,最终可导出为嵌入式代码部署。该系统展现了电子扫描波束的技术优势,为雷达系统设计提供了有效的仿真方法。

amy_mhd的博客 209

【ArcGIS微课1000例】0068:ArcGIS加载world imagery高清卫星影像教程

本文介绍了如何在ArcGIS中加载World Imagery高清卫星影像作为谷歌影像的替代方案。通过添加ArcGIS Server并输入在线图集URL(https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer),即可连接并预览包含中国影像、青海湖、东方明珠等全球高清卫星图。该教程提供了详细的操作步骤图示,帮助用户快速获取优质底图数据,适用于地理信息分析和可视化应用。

智慧空间实验室 5416

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【整理】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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Google C++编程风格指南

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

skyremember的专栏 1234

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

[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、付费专栏及课程。

余额充值