编码规范C/C++

2023-11-06

一、命名:

1.类型名

使用首字母大写的驼峰命名法(如StudentGrade,MyClass)
命名由单词组合而成,其中每个单词以大写字母开头,不包含下划线 。
宏、常量,enum 结构中的成员命名全部大写

2.变量

语义上应该是一个名词或名词短语
使用下划线命名法(如student_name)

全局变量(尽量少用):g_后首字母大写。中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,

命名要有描述性;
少用缩写;
省略掉无意义的长度,比如number_error可以用num_error替换

3.函数/方法

语义上应该是一个动词或动词短语
使用首字母大写的驼峰命名法(如studentName)
的名字采用英文大小写混合的驼峰命名法(camelCase)且首字母最好是动词,没有下划线。

举例:getName(), isEmpty(),
@note:尽量使用insert(),append()代替行为不明的add()

4. 文件名

文件名全部小写,需要的话可以用“_”串接;不要与标准库等下边的头文件重名
1> 尽量少用泛指词汇,如flag,tmp等,应该使用特指词汇
2> 在同一个类不同的场景(contexts)中不要复用变量名;不同的场景最好使用不同的命名;
有意识的为变量名、宏名加上本模块的关键字,就不至于和其它模块、系统API的命名空间相冲突;
例如: 宏的名称过短,如:”DEBUG” 或 “_DEBUG”,很可能和别的模块,系统模块相冲突;
3>多重循环中,尽量少使用约定俗成的 i,j,k ,多使用有具体含义的命名。

二、代码格式

#include "./include.h" ///< if include is local header files, it should be like this.
int main() { ///< black space

}
if (true) {
} else {
}
for () {}
if (a == b) {}
while () {} ///< not while();
cout << "" << endl;
move(a, b); ///< but not end '; <black space>'
///< to add more

三、注释:

1.函数命名时,尽量处理成 Doxygen 可处理的注释格式
/**
*@brief:这是....
*/ 
///< some words

@file 档案的批注说明。
@author 作者的信息
@brief 用于 class 或 function 的简易说明,例:
@brief 本函数负责打印错误信息串。
@param 主要用于函数说明中,后面接参数的名字,然后再接
关于该参数的说明。
@return 描述该函数的返回值情况,例:
@return 本函数返回执行结果,若成功则返回TRUE,
否则返回 FLASE。
@retval 描述返回值类型,例:
@retval NULL 空字符串。
@retval !NULL 非空字符串。
@note 注解
@brief 注释文字
@exception 可能产生的异常描述,例:
@exception 本函数执行可能会产生超出范围的异
常。
@date 日期
@version 软件版本

2.当代码比较长,特别是有多重嵌套时,应当在一些段落

的结束处加注释,便于阅读。

while(condition1)
{
while(condition2){
}/*<应注释说明>*/
}/*<应注释说明>*/ 
3.函数注释举例:
/**
* @brief 功能 : <函数实现功能>
* @param [in] 输入参数 1 : 参数说明
* @param [out] 输出参数 2 : 参数说明
* @return 描述该函数的返回值情况
* @exception 可能抛出的异常及其说明(如果有的话)
* @note 注意事项(如果有的话 )
*/  
4.文件注释包含两部分:版权公告,文件内容公告:
/**
* @copyright 2008-2011, Zhejiang Insigma Group Co.,Ltd.
* @version <版本号>
* @author <xxx>, [yyy], [zzz] ...(作者和逗号分割的修改者列表)
*/
/**
* @file 文件名
* @brief <描述文件的功能等相关信息>
* 版本历史
* @date 2011-02-17 - Created file v0.2, 2011-03-02–Edited file V0.3 */ 
5. TODO 注释是为了标记一些未完成或完成的不尽如人意的地方,通过搜索就可以知道还有哪些活要干。
/*TODO@Bill: Remove t
his code when all clients can handle XML
responses.
*/ 

最后:
注释是对代码的“提示” ,而不是文档。程序中的注释不可喧宾夺主,注释太多会让人眼花缭乱

四、文档规范

1.所有头文件都应该使用#define防止被多重包含:
#ifndef  FOO_BAR_H_
#define  FOO_BAR_H_
/*文件内容*/
#endif //防止头文件被重复包含
2.#include 包含顺序:

项目内的.h 文件
C核心库
C++库
第三方库的.h文件

四、其他习惯

  • 变量在声明时初始化;
  • 尽量少用不用全局变量;

@note:其他衡量程序健壮程度的指标:扇入(该模块被调用的父模块个数),扇出(该模块调用的子模块个数),圈复杂度(独立运行路径条数),圈复杂度越大程序越难以维护容易出错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码规范C/C++ 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 教你用OpenCV 和 Python实现圆物检测

    点击上方 码农的后花园 选择 星标 公众号 精选文章 第一时间送达 基于python使用OpenCV实现在一张图片中检测出圆形 并且根据圆检测结果信息 绘制 标记出圆的边界和圆心 1 HoughCircles 霍夫圆检测函数 在Opencv
  • 告诉你个秘密(ISCCCTF)(Crypto--bugku)

    观察一下 有A E B 没有其他字母 猜测是十六进制转字符 还是字符串 有大写 小写 数字 猜测还有加密 然后各种解密都尝试一下 emem 是base64 四个一组 三个一组 哈哈 键盘密码 对的 就是键盘加密 被包围的字母就是flag 提
  • 最常用激活函数公式(更新中)

    最常用激活函数公式 如需转载 请务必标明出处及作者信息 洋石灰儿 https blog csdn net Yshihui article details 80540070 1 what and why 直观的作用就是进行非线性操作 将输入信
  • Linux服务器clang-13安装(环境变量配置)

    1 从llvm的github网址选择合适的release合适的运行平台进行下载 下载官方预编译的二进制压缩包 2 将下载好的压缩包进行本地上传 使用scp命令进行上传 scp r P 端口号 本地文件路径 服务器ID等 服务器上目标地址 3
  • 九大内置对象

    1 request对象 request 对象是 javax servlet httpServletRequest类型的对象 该对象代表了客户端的请求信息 主要用于接受通过HTTP协议传送到服务器的数据 包括头信息 系统信息 请求方式以及请求
  • Fastadmin,配置SMTP邮件,踩坑笔记

    phpmailer php做发送邮件 有个叫phpmailer的插件 而fastadmin正是用的这一插件 首先是准备工作 你要把你的qq邮箱设置一下开启SMTP邮件 qq邮箱的设置位置在 账户 账户 这一选项下 这里如果你手机绑定了qq安
  • web服务器性能 测试,主流web服务器性能测试

    前言 因为boss要一个并发能上W得平台 而且还是要PHP得 恩 好吧 我是不喜欢php的 但是没办法 谁叫PHP是世界上最好得语言呢 于是心血来潮 来了一组 web服务器性能测试 测试有 php7 fpm docker nginx jav
  • 【华为OD机试真题 Java】小组卡片最大数字(100%通过+全网最详细注释)

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • win10开始菜单打不开,使用startmenu.diagcab进行修复

    win10开始菜单打不开 使用startmenu diagcab进行修复 下载后打开运行startmenu diagcab 打开后 点击高级选项 勾选自动修复应用措施 接着点击下一步 运行修复后点击查看详细信息 查看打不开的原因 进行下一步
  • hk pic.net forum.php,HC-SR04 problem with pic18f24k22.

    2021 03 26 00 11 57 proestpa Hello I have a problem with HCSR04 ultrasonic distance sensor I wrote a code that works per
  • 记一次蓝屏的解决,错误代码IRQL_NOT_LESS_OR_EQUAL

    这两天不知为何 电脑总是正在运行时自动重启 今天忍无可忍 百度了一下解决方法 有方法说 我的电脑右键 属性 高级 启动和故障恢复 中的设置 系统失败 中取消勾选 自动重新启动 能解决问题 所以就先照做了 如下图 不设置还好 没想到一设置 重
  • 2021蒙城高考成绩查询,2021亳州高考成绩查询入口

    今年的高考已经和大家告一段落 想必考生和家长们现在比较关注的就是高考成绩查询了 下面出国留学网小编给大家分享 2021亳州高考成绩查询入口 仅供参考 希望帮助各位考生便捷查询高考成绩 祝大家考个好成绩 2021安徽高考成绩查询时间 2021
  • cmd命令安装python第三方库_Python如何安装第三方库

    Python如何安装第三方库 版权申明 非商业目的注明出处可自由转载 博文地址 https blog csdn net cdpxc article details 108808780 出自 cdpxc 注 笔者是在D盘直接安装了Anacon
  • VAE,变分

    1 Latent Variable Model 生成模型一般会生成多个种类的数据 比如说在手写数字生成中 我们总共有10个类别的数字要生成 这个时候latent variable model就是一个很好的选择 为什么呢 举例来说 我们很容易
  • 使用tika 判断文件类型

    判断文件类型一般可采用两种方式 后缀名判断 简单易操作 但无法准确判断类型 文件头信息判断 通常可以判断文件类型 但有些文件类型无法判断 如word和excel头信息的前几个字节是一样的 无法判断 Apache Tika 是什么 Apach
  • gru matlab实现,分别用CNN、GRU和LSTM实现时间序列预测(2019-04-06)

    卷积神经网络 CNN 长短期记忆网络 LSTM 以及门控单元网络 GRU 是最常见的一类算法 在kaggle比赛中经常被用来做预测和回归 今天 我们就抛砖引玉 做一个简单的教程 如何用这些网络预测时间序列 因为是做一个简单教程 所以本例子中
  • 【QT】判断本地语言

    QLocale ql switch ql language case QLocale Chinese 系统语言是中文 可以进行其他操作 break default break
  • 模块之间的耦合与内聚的七种类型

    文章目录 前言 按功能划分的四种模块类型 七种耦合 1 非直接耦合 2 数据耦合 3 标记耦合 4 控制耦合 5 外部耦合 6 公共耦合 7 内容耦合 七种内聚 1 偶然 巧合 内聚 2 逻辑内聚 3 时间内聚 4 通信内聚 5 顺序内聚
  • 常用 Git 命令清单

    常用 Git 命令清单 文章目录 常用 Git 命令清单 在当前目录新建一个Git代码库 新建一个目录 将其初始化为Git代码库 下载一个项目和它的整个代码历史 显示当前的Git配置 编辑Git配置文件 设置提交代码时的用户信息 添加指定文
  • 编码规范C/C++

    一 命名 1 类型名 使用首字母大写的驼峰命名法 如StudentGrade MyClass 命名由单词组合而成 其中每个单词以大写字母开头 不包含下划线 宏 常量 enum 结构中的成员命名全部大写 2 变量 语义上应该是一个名词或名词短