C++编程规范和标准总结

详解 C/C++ 各大编程规范 详解 Google C++ Style Guide、C++ Core Guidelines、MISRA 以及腾讯、华为、360 等各大 C/C++ 编程规范 阅读详情
  • 文件名:
    • 每个源代码文件应该有一个包含文件。每个包含文件描述了单个类或者多个类相结合的集合。一般头文件(.h,或.hpp)包含类的定义而不是实例。因此包含文件可以用在多个文件当中,源文件(.c,.或cpp)定义了编译时加载进内存的代码,它的实例化定义包含在头文件中,例如,一个类的定义应该包含在.hpp的包含文件中,一个全局变量应该在.cpp文件中实例化而不是.hpp文件中。用extern在头文件声明该全局变量。
    • 文件名应该能够反映出类名。通常类名都是大写字母开头,头文件名和源文件名一般用小写字母开头,如文件classBase.hpp将包含ClassBase{}的定义,classBase.cpp将包含该类函数的源代码。
    • 类名建议使用下面的格式命名: CXxClassID, 其中 "Xx" 指的是类的构件. (如. Mn-- main, Fm-- File manager, Cp --command processor) 每个单词的首字母大写,文件命名时,去除前面的“C”。
    • 当在一个头文件中包含另外一个头文件,不要包含全路径。这就避免了依赖于操作系统方法引用的目录路径创建的可移植性问题。应该使用编译器命令行标志来包含路径,如 –l/路径名。
    • 使用双引号“”来包含本地头文件,用<>来包含操作系统或编译器提供的头文件。
    • 为了方便使用脚本和make文件,文件名(目录路径)不应包含空格,括号“(”或其他操作系统部支持的非法字符。
  • 文件格式:
    • 行结束: 对于跨平台开发,应该去除”^M”字符。可以采用下面方法来去除:
      • Command: dos2unix filename.cpp
      • vim: :1,$ s/{ctrl-V}{ctrl-M}//
    • 如果使用MS/Visual studio ,在文件末尾加入包含至少一个空白的空行可以去除Unix下文件的文件结束标志“ctrl-D”。
  • 文件头:
    • 文件头应该包括版权声明,发布lincese.例如源代码在GUN license下发布的,需要声明。如果该文件包含公司的专有材料也应该声明。如果代码的license,copyright,发布用途不同,需要将这些代码划分到不同的文件中。
    • 注释应该放置在文件的最上面,用来说明该文件的名字和文件的内容。
  • 头文件:
    • C++ 经常用.hpp作为头文件名的后缀,而C用”.h”来作为头文件后缀。使用预定义宏来防止多次包含头文件。

#ifndef CLASS_NAME_H
#define CLASS_NAME_H
...
..
#endif


o   减少在头文件包含文件的个数,这样可以减少构建build时间。如果一个类的头文件不需要使用另外一个类的数据成员,可以采用calss className的方式来声明而不是包含该类的头文件。为了避免包含该类的全部声明,可以采用引用或指针或者前向声明该类。

o   前向声明的例子:class className;

注意:STL容器(std::list 和 std::vector)和typedefs不能使用前向声明,必须使用#include来包含。

o   如果C++中需要调用C函数,则在C头文件中应该使用下面的定义:

#ifdef __cplusplus
extern "C" {
#endif
...
..
C function declarations
..
...
#ifdef __cplusplus
}
#endif   


o   避免使用在”.hpp”头文件中使用””namespace”。如果该文件包含在源代码中,使用者将无法使用定义在namespace中的变量并且将导致变量名冲突。

  • 类和结构体:
    • 类和结构体的定义一般使用大写字母开头。基类一般在类名后面添加”Base”作为后缀。在基类中的析构函数应该加上virtual。不是纯虚函数不需”0”.
class ClassName
{
  public:
     // Constructors:
     // Destructor:
     // Functions: modifiers (set), selectors (get)
     // itterators:
     // Attributes visible by scope of instantiation and use
  protected:
     // Attributes visible to descendents
  private:
     // Local attributes
};


                

 

  • 依赖于机器的代码应该放置在不同的文件中,易于移植。
  • 函数:
    • 函数体长度: 对于长度没有硬性的规定,只要容易理解就可以。如果不行,需要拆分成许多小的容易理解的部分。复杂的算法需要拆分成不超过50行的函数代码。
    • 在CPP中函数的定义应该和头文件中声明的函数顺序一致。
    • 行数名:使用相互补充的函数名: get/set, add/remove, create/destroy, start/stop, insert/delete, increment/decrement, begin/end, first/last, up/down, min/max, next/previous, open/close, show/hide, suspend/resume等。
    • 使用关键词 "const"来标志在函数中不能改变值的变量。
  • 使用规则:
    • 使用大写字母和下划线来区分宏常量和枚举。
    • 用单个大写字母来标志变量中一个新词、类名、函数名的开始。.
      如 thisIsAnExample
    • 函数名应该以小写字母开始。.
    • 类的定义使用大写字母开头。 “C”开头是匈牙利命名法,类的实例化应该以小写字母开头。如:
        CAbcXyz abcXyz
  • 不要使用在浮点数和0.0之间使用”==”。
  • 枚举:使用枚举应该使用它们声明的使用范围。
class ClassName
{
   enum Month { January, February };
}
 
Month tmpMonth = ClassName::January;

不要使用: Month tmpMonth = ClassName::Month::January;

  • C++语法格式:
    • 在下面这些操作符的两边应该加一个空格 +, -, <. >, =, ==, ...
    • 使用空格来缩进,不要使用Tabs,因为在不同的IDE和编辑器可能对Tabs的定义不同。
    • 将长的 Boolean表达式和参数分行并且使用适当的缩进。

if( longVariableNameAbc < longVariableNameDef&&
   longVariableNameIjk < longVariableNameXyz)
{
}


 

分隔:

改变一个单词的字母为大写来区别一个新词的开始,这样可以时变量更短,是因为不使用“_”。Examples:

  • VariableForTheBlueTeam
  • variableForTheBlueTeamInstantiation
  • SPAM_Eliminator
C++ 变量命名约定和风格

"匈牙利" 前缀:.

m_
my_

Variable is a member of class. Some use the prefix "my" for class member variables and "our" for class member static variables. (Also "m" and "ms" for member and member-static) I have also seen the use of "_" as both a prefix and as a suffix to denote a class member variable. If using mixed languages remember that many FORTRAN compilers use a "_" suffix. Due to C++ name mangling there will probably be no conflict when using this notation. It is a common practice but theoretically could pose a problem with mixed languages.

_
(underscore)

  • Variable not intended to be exposed externally to the user. Internal workings only. Most often used by compiler and library authors.
  • Sometimes used (not preferred) as a suffix to repressent a class member variable.
  • Sometimes used as variable prefix for function arguments. When used with function arguments, it can represent in/out/inout:
    • _variable: Function input variable. More explicit: _inVariable
    • variable_: Function output variable. More explicit: outVariable_
    • _variable_: Input/output by function. More explicit: _inoutVariable_

Note: Dangerous when mixing C with FORTRAN as FUNCTION subroutines as suffixed with "_" in the object code. compiler flag "-fno-underscore".

__

Marks an use as extension to ANSI C++. Often not compiler independant. Usually reserved for use by compiler writers so it is best to avoid the double underscore.

Note: Be careful when mixing with FORTRAN as "__" is often generated in FORTRAN object symbol names. See the f77 compiler flag "-fno-second-underscore". Also used in Microsoft "Managed C++" directives.

a

array

c
n

count / number of

cb

count bytes / number of bytes

d

Data type double

dw

Data type double word

e

an enumeration or element of an array

b
f
is
has
should

boolean
(flag)
Example: isFound
Note: accessor functions can also use these same prefixes: bool isBoolean{ return mBoolean; }

g_

g gbl
Gbl

global variable. Also used is the "::" operator. i.e. ::variable

s
s_

Static variable

h

handle

i

index to an array or STL iterator

l

long data type. i.e. "long int"

p
ptr

pointer. Sometimes "Ptr" used as suffix.

lp

pointer to long data type

ch

C character

sz

Zero terminated string. char[]

str

C++ GNU template data type "string"

u

unsigned

ev

event

min

Lowest value

first

First element

lim

array limit

cmd

Command

cmp

Compare

init

Initialize

intr

Interrupt

msg

Message

rx

Recieve

tx

Transmit

C

Prefix for a Class name. Notation used by Microsoft MFC.
Example: CAbcXyz abcXyz
Note: The instatiation begins with a lower case letter while the class definition begins with a capital letter.

_t
_Type

Type definition (typedef - suffix). Prefix with capital letter.

_Enum

Enumeration type definition suffix.

_ds

Data structure suffix.

匈牙利命名例子::

  • ppachVarName: pointer to a pointer of an array of characters.
  • m_ppachVarName: class member variable which is a pointer to a pointer of an array of characters.

使用匈牙利命名法应该使代码更容易读而不是更复杂。有的人使用上面命名规则的一部分,如:m, _, g, s, e, b,i, n.

 

 

C++中头文件和源文件的编写规范 在C++编程中,头文件和源文件是两个关键组成部分。头文件通常包含类和函数的声明,而源文件包含这些类和函数的定义和实现。正确编写头文件和源文件可以提高代码的可读性、可维护性和可重用性。下面将详细介绍如何编写C++中的头文件和源文件。接下来,通过包含必要的头文件来引入所需的库函数和类型声明。通过合理编写和组织头文件和源文件,可以使代码结构更加清晰,方便团队协作和后续的维护工作。在源文件中,首先包含相应的头文件。然后,按照需要实现类的构造函数和普通函数。最后,可以自由编写主函数来测试类和函数的功能。 阅读详情

相关推荐

C++中头文件和源文件的编写指南

头文件提供了接口的声明,源文件提供了接口的实现,使得代码更易读、易维护和易重用。在实际项目中,我们还可以将功能更复杂的类和结构体的声明与实现分别放在不同的头文件和源文件中,以进一步提高代码的可读性和模块化程度。上述示例中,头文件 “myheader.h” 声明了一个函数 add() 的接口,而源文件 “mysource.cpp” 实现了这个函数。不要在头文件中定义全局变量,而是使用 extern 关键字在头文件中声明它们,并在源文件中进行定义。实现头文件中声明的函数,并提供必要的注释来解释功能和使用方法。

techDM的博客 1032

C++中的头文件

一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,

nicky_zs的专栏 5万+

ios快捷指令进行钉钉打卡

首先 1、打开快捷指令 2、自动化 3、创建个人自动化-特定时间 4、添加操作-搜索“随机数” 5、最小值和最大值填充 6、添加操作-搜索“等待” 7、长按“1秒钟”,选择魔法变量,选择上一步的随机数 6、添加操作-搜索“钉钉” 7、选择钉钉-随便一个聊天窗口。 8、添加操作-搜索“等待”,这次将等待时间设为10秒 9、添加操作 “搜索天气” ,选择显示天气。 注意点: 1、此操作依赖于钉钉极速打卡,只是帮忙唤起钉钉。 2、保存自动化时有个运行前询问,务必关掉。 3、手机不能设

blaze_jack 5万+

C++源文件与头文件详解:定义、用途与编程规范

在C++编程中,源文件(Source Files)和头文件(Header Files)是组织代码的基本单元。它们各自承担不同的职责,通过合理的划分与使用,不仅能提高代码的可读性和可维护性,还能优化编译效率。本文将详细介绍C++中的源文件和头文件的概念、作用、使用方法、内容安排以及编程规范,并通过示例加以说明。源文件与头文件的合理划分是C++编程的重要实践。通过将接口声明与实现分离,不仅提高了代码的模块化和可维护性,还优化了编译过程。

m0_73640344的博客 2958

AHB不对称半桥反激电路设计(一)变换器拓扑工作原理详解

本文详细分析了AHB(不对称半桥)反激变换器拓扑的工作原理及关键优势。该拓扑通过谐振腔结构实现原边功率管的零电压开通(ZVS)和副边整流管的零电流关断(ZCS),显著提升效率至95%以上。文章阐述了6个工作阶段的时序特征,包括谐振电感电流和电容电压的数学模型推导。AHB拓扑具有漏感能量回收、宽电压输出(适配PD快充等场景)和协同储能等优势,相比传统方案可缩小变压器体积30%,成为100-300W隔离电源的理想选择。

【Simon】的博客 7130

RPA实战-UiPath自动化处理Outlook邮件附件全流程解析

本文详细解析了如何使用UiPath实现Outlook邮件附件的自动化处理全流程,涵盖环境配置、核心流程实现、高级功能扩展及性能优化技巧。通过RPA技术,企业可大幅提升邮件附件处理效率,减少人工操作错误,适用于财务、物流等多个场景。

weixin_33701251的博客 426

C++编程规范

C++编程规范

m0_57692057的博客 1715

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7796

【编程语言】C/C++语言常见标准和规范

C/C++ 是两种功能强大且广泛使用的编程语言。尽管它们没有像 Java 那样强制性的命名规则,但为了提高代码的可读性和可维护性,遵循一些普遍认同的编程规范和标准仍然是非常重要的。本文将探讨 C/C++ 编程中的一些命名规范及标准,以帮助开发者编写更清晰、更一致的代码,这些风格已被绝大多数开发者接受和使用。

XuanRan的博客 7086

海康威视工业相机SDK二次开发实战:多相机同步采集与图像存储

本文详细介绍了海康威视工业相机SDK二次开发实战,包括多相机同步采集与图像存储的优化方案。通过MVS软件搭建开发环境,实现硬件与软件触发同步采集,并提供高效的图像存储管理技巧,帮助开发者提升工业视觉项目的效率与稳定性。

weixin_29168813的博客 666

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 436

C++的编程规范(第一小节)

(1)代码简洁精炼,美观,可读性好(2)高效率(3)高复用,可移植性好(4)高内聚,低耦合(5)没有冗余(6)规范性,代码有规可循。(7)特殊排版、特殊语法、特殊指令,必须特别说明。

kaola_kao的博客 288

【人工智能】在 cc-switch 中配置 AnyRouter 接入 Claude Code 完整指南

本文介绍了在cc-switch工具中配置AnyRouter中转服务以接入Claude Code的详细步骤。主要内容包括:1) 准备API令牌和端点地址;2) 填写基础信息和模型参数;3) 保存配置并重启终端生效;4) 常见问题排查方法。重点强调了API地址格式、模型ID准确性以及配置写入的必要性,帮助用户顺利完成中转服务配置,实现Claude 4.5版本的正常使用。

奶爸的编程之路,也就一周冷个三天 3103

C++ 编程的基本形式:文件名、防卫式声明、头文件布局

C++ 编程的基本形式:文件名、防卫式声明、头文件布局

weixin_BESTWISHES0120的博客 1109

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 911

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++编程规范之28:优先使用++和—的标准形式。优先调用前缀形式

摘要:     如果定义++c,也要定义c++:递增和递减操作符很麻烦,因为它们都有前缀和后缀形式,而两种形式语义又略有不同。定义operator ++和operator –时,应该模仿它们对应的内置操作符,如果不需要原值,应该优先调用前缀版本。     对于++和—而言,后缀形式返回的是原值,而前缀形式返回的是操作后的新值。应该用前缀形式实现后缀形式,标准形式是: //前缀形式++ T&T

longshengguoji的专栏 1793

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++编程规范之27:使用算术操作符和赋值操作符的标准形式

摘要:     如果要定义a+b,也应该定义a+=b:在定义二元算术操作符时,也应该提供操作符的赋值形式,并且应该尽量减少重复,提高效率。 一般而言,对于某个二元操作符@(可能是+、-、*等),应该定义其赋值形式,使用a@=b和a=a@b具有相同的含义(只不过第一种形式可能更高效,它只计算一次a)。实现这一目标的标准方法是用@=来定义@,如下所示: T&T::operator@=(const

longshengguoji的专栏 1564

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++编程规范指46:如果提供专门的new,应该提供所有标准形式(普通、就地和不抛出)

摘要:     不要隐藏好的new:如果类定义了operatornew 的重载,就应该提供operator new 所有三种形式——普通(plain)、就地(in-place)和不抛出(nothrow)的重载。     很少需要提供自定义的new 或者delete,但是如果确实需要,通常也不想隐藏内置的签名。 C++中,在某个作用域(比如一个类作用域)里定义了一个名字之后,就会隐藏所有外围作

longshengguoji的专栏 1791

怎样遵守编程规范,减少和控制C++编程中出现的bug?

通过遵循 C++ 标准和最佳实践、编写规范的代码、进行防御性编程、使用静态分析和代码审查、编写单元测试和回归测试,以及记录日志和使用调试工具,你可以有效地减少和控制 C++ 编程中出现的 bug。这些策略不仅能提高代码质量,还能提升代码的可维护性和可读性。

捕鲸叉的专栏 723

【一篇即毕业系列】C++的头文件 & 源文件 从基础到通天!!

本文介绍了C/C++项目中头文件和源文件的基本概念与作用。头文件(.h/.hpp)用于声明函数、变量和类型定义,提供模块接口;源文件(.cpp/.cc)则包含具体实现。文章通过示例代码展示了模块化编程的实现方式,并解释了头文件保护机制以防止重复包含。同时概述了编译链接过程中头文件的作用,以及常见的命名规范。最后总结了C语言常用的标准库头文件及其功能,为开发者提供了实用的参考指南。全文简明扼要地阐述了头文件和源文件在C/C++项目中的核心地位和使用要点。

maybe_Tian_Xia的博客 920

C++ 编程规范及惯用法(未完成)

最近重读了一下一些经典的 C++ 书籍,再次感觉到 C++ 的难与浩大,为了日后编程能够减少错误和提高效率,故希望把一些编程规范做一下总结及收集,同时也把一些编程的最佳实践和惯用法总结一下,方便日后开发的时候能够根据需要应用上。 这个工作说容易也容易,基本就是把这些书籍的目录罗列一下。说难也难,要做到能够指导日后的快速开发,这个确实不容易。反正尽量做吧,应该会有点用的。 首先,把我认为比较好的

早晨的阳光 的技术博客 1592

▁▂▃ 详解各大厂编程规范 ▃▂▁

在早期尚未形成所谓“现代”编程思想的时候,此规范就已经面世并发挥作用了,其中的某些观点可能与 C++ 官方不符,比如 C++ 创始人曾一度认为用常数 0 表示空指针比用 NULL 更好,而GSG 的观点与之相反,但历史表明 GSG 的观点是正确的,C++11 引入了专属符号 nullptr 以表示空指针的值。安全规则集合侧重违规代码的量化界定,严格遵循 C11 和 C++11 标准,并兼顾 C18、C++17 以及历史标准,可为不同方向的开发团队提供灵活而统一的规范指导。各大厂知名规范体系~

hogwarts_ziqi的博客 413

编程规范

编程修养(精品文,建议认真品读并实践:https://mp.weixin.qq.com/s/7ymWeaivAxj1I0Z2LhA7dA

天使也有爱 230
上一篇: C++ STL:vector和list
下一篇: Linux中的make和makefile
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值