1.文件和目录
(1) 文件命名
文件的命名要准确、清楚地表达其内容,同时文件名要简明扼要,防止文件名过长带来不便。 可以在文件名中适当地使用缩写。 下面提供两种命名方式供参考:
如:主控程序为mpMain.c、mpDisp.c等。
如:主控程序为Main.c、Disp.c等。
(2)头文件中段落的顺序
// 1、文件头注释
// 2、防止重复引用头文件的设置
// 3、#include 部分
// 4、enum 常量声明
// 5、类型声明和定义,包括 struct、union、typedef 等
// 6、全局变量声明
// 7、文件级变量声明
// 8、全局或文件级函数声明
// 9、函数实现。按函数声明的顺序排列
// 10、文件尾注释
(3)引用头文件时不要使用绝对路径
如果使用绝对路径,需要移动目录时必须修改所有相关代码,既繁琐又不安全; 如果使用相对路径,只需要在需要移动目录时修改编译器的一个选项即可。 例如:
#include “/project/inc/hello.h” /* 不应使用绝对路径 */
#include “../inc/hello.h” /* 可以使用相对路径 */
(4)引用头文件时,用""
#include /* 标准头文件 */
#include /* 工程制定目录头文件 */
#include “global.h” /* 当前目录头文件 */
#include “inc/config.h” /* 路径相对于当前目录的头文件 */
(5)防止头文件被重复引用
#ifndef __DISP_H /* 文件名前名加两个下划线“__”,后面加 “_H”
#define __DISP_H
...
...
#endif
(6)头文件中只存放“声明”,不存放“定义”
(7) 文件长度
文件的长度没有很严格的要求,但尽量避免。 一般情况下,文件长度尽量控制在1000行以内。
2. 排版
(1) 程序块应采用缩进式书写,缩进空格数为4个。
(2) 相对独立的程序块之间和变量说明后必须加空行。
(3) 较长的语句或函数过程参数(>80 个字符)应分多行书写,长表达式应在低优先级运算符处换行。 行应适当缩进,使排版整洁,语句可读。
(4)一行中不允许写多个短语句,即一行中只写一个语句
(5) 程序块的分隔符(如大括号'{'和'}')应单独一行,在同一列
(6) 对两个或多个关键字、变量、常量进行等价运算时,它们之间的运算符前后或前后必须加空格; 在进行非等价运算时,如果是密切相关的立即运算符(如->),其后不应有空格。
例子:
三、注意事项
(1) 一般情况下c语言变量名的命名规则,源程序中的有效注释量必须在20%以上。
说明:注释的原则是帮助程序的阅读和理解。 将它们添加到应该添加的位置。 评论不宜过多或过少。 评论语言必须准确、通俗易懂、简洁。
(2)文件开头应说明文件的版权、内容简介、修改历史等项目。
版本号、日期、作者、更改说明等项目必须在创建代码时和每次更新时在文件的历史记录中进行注释。 下面是一个例子,当然不限于此格式,但建议包含以上信息。
(3) 对于函数,在函数实现之前,应给出与函数实现相关的充分、简洁的注释信息。
例子:
下面函数的注释比较规范。 当然,不限于这种格式,但建议包含以上信息。
(4)边写代码边注释,修改代码的同时修改相应的注释,保证注释和代码的一致性。 不再有用的评论将被删除。
(5)标注内容应清晰明了,含义准确,防止标注产生歧义。
解释:不正确的评论无益反而有害。 注释主要说明代码是做什么的(What),或者必要时说明为什么要这样做(Why)。 注释不用于解释它是如何实现算法的(How)。
(6) 避免在注释中使用缩写词,尤其是不经常使用的缩写词。
说明:在使用缩略语之前,应对缩略语进行必要的解释。
(7) 注释应靠近所描述的代码,对代码的注释应置于其上方或右侧(单条语句的注释),不能置于其下方。 空行分开。
示例:以下示例不符合规范。
示例 1:不规则书写
示例 2:不规则书写
例三:标准写法
例子4:写的不规范,好像代码太紧凑了
例5:标准化写作
(8) 注释缩进与说明书相同。
说明: 可以使程序的排版整齐,便于注释的阅读和理解。
例1:下面的例子,排版不工整,阅读起来有点不方便。
示例 2:正确的布局。
(9) 注释必须写在变量的定义和分支语句(条件分支、循环语句等)上。
解释:这些语句往往是程序实现特定功能的关键。 对于维护者来说,好的注释有助于更好地理解程序,有时甚至比阅读设计文档更好。
(10)对于switch语句下的case语句,如因特殊情况需要先处理一个case再进行下一个case,则必须在case语句处理后的下一个case语句前加上明确的注释。
解释:这样,程序编写者的意图更加明确,可以有效防止break语句被无故遗漏。
示例(注意粗斜体):
(11)评论格式尽量统一。 推荐使用“/* … */”,因为并不是所有的C编译器都支持C++注释“//”。
(12)注释应考虑程序可读性和外观排版等因素。 如果使用的语言是中文和英文,建议使用中文,除非能用英文流利准确地表达。
注意:注释语言不统一,会影响程序的易读性和排版。 为了维护人员,建议使用中文。
(13)标识符的命名应清晰、明确、含义明确。 同时,使用大家都能理解的完整单词或缩写词,避免误解。
注意:较短的单词可以通过删除“元音”来缩写; 较长的单词可以通过取单词的前几个字母来缩写; 有些词有公认的缩写。
例:下面单词的缩写,大家基本都能认出来。
temp 可缩写为 tmp;
flag 可缩写为 flg;
statistic 可缩写为 stat;
increment 可缩写为 inc;
message 可缩写为 msg;
(14)如有特殊约定或缩写的命名,必须注明。
说明:文档中使用的缩略语或约定,特别是特殊缩略语,应在来源文档开头进行必要的注释。
(15) 自己独特的命名风格必须自始至终保持一致,不能来回更改。
注意:只有符合项目组或产品组的命名规则,才能使用个人命名风格。 (即没有在命名规则中指定的地方可以有个人的命名风格)
(16) 变量命名,禁止取单个字符(如i,j,k…)
建议除了具体含义外,还可以表示变量类型、数据类型等,但允许使用i、j、k作为局部循环变量。 变量,尤其是局部变量,如果用单个字符表示,很容易打错(比如i写成j),但编译时无法检查,有可能要花很多时间检查错误这个小错误。
(17) 命名规范必须与同一项目中使用的系统风格一致,统一
例如使用全小写加下划线或大小写混合的UNIX风格,不要使用大小写加下划线混合,将其作为m_、g_等特殊标识符来标识成员变量或全局变量,后跟允许大小写混合。
示例:不允许添加用户,允许添加用户、添加用户、m_AddUser。
(18) 除非必要,不要使用数字或奇怪的字符来定义标识符。
示例:命名如下以造成混淆。
它应该用一个有意义的词来命名:
4.可读性
(1) 注意运算符的优先级,使用括号来明确表达式的运算顺序,避免使用默认优先级。
(2)避免使用难以理解的数字,代之以有意义的符号。
例子:下面的程序可读性很差
应改为如下形式:
(3) 除非绝对必要,否则不要使用困难和技术含量高的语句。
解释:高科技报表不等于高效程序。 其实,程序效率的关键在于算法。
例子:下面的表达式如果不仔细考虑可能会出问题,也很难理解。
应更改如下:
5. 变量、结构、常量、宏
(1) 为了书写和记忆方便,重新定义变量类型如下:
(2) 常见的前缀类型
(3)变量作用域的前缀
为了清楚地标识变量的作用域,减少命名冲突,在变量类型前缀前加一个表示变量作用域的前缀,并用下划线-分隔变量类型前缀和变量作用域前缀。
具体规则如下:
uint32_t g_ulParaWord;
uint8_t g_ucByte;static uint32_t s_ulParaWord;
static uint8_t s_ucByte;(4) 结构命名规则
表示类型的名称,所有名称以小写字母标签开头,后面每个英文单词的首字母大写(包括第一个单词的首字母),其他字母小写,以_T结尾标识。 单词不用下划线分隔,结构变量以t开头。 喜欢:
/* 结构体命名类型名 */
typedef struct tagBillQuery_T
{
...
}BillQuery_T;
/* 结构体变量定义 */
BillQuery_T tBillQuery;(5) 枚举定义全部使用大写,并标明结尾_E。
(6) 常量、宏、模板的名称要全部大写。 如果名称由多个单词组成,则用下划线分隔这些单词。
#define LOG_BUF_SIZE 8000
6.功能
(1)函数的命名规则。
每个函数名前缀必须包含模块名,模块名小写以区别于函数名。
如:uartReceive(串口接收)
注意:对于非常简单的程序,可以不添加模块名称。
(2) 函数的形参。
函数的形式参数均以下划线_开头,已被证明是为了区别于普通变量。 对于没有形式参数且为空 (void) 的函数,括号后紧跟函数。
uint32_t uartConvUartBaud(uint32_t _ulBaud)
{
}(3) 一个函数只完成一个函数。
(4)函数名称应准确描述函数的功能,用动宾短语来命名执行操作的函数。
注意:避免用process、handle等模棱两可的动词命名函数,因为这些动词没有具体说明要做什么。
示例:按如下方式命名函数。
(5) 避免设计参数超过五个的函数,将不用的参数从接口中移除。
说明:目的是降低函数间接口的复杂度,复杂的参数可以使用结构体传递。
(6)调用函数填写参数时,尽量减少不必要的默认数据类型转换或强制数据类型转换。
解释:因为数据类型转换或多或少是危险的。
(7) 防止将不相关的语句放入一个函数中。
例子:下面的函数是一个随机内聚。
矩形的长宽基本和点的坐标没有关系,所以上面的函数是随机内聚的。 应该拆分成两个函数如下:
*版权声明:转载文章及图片均来自公网,版权归作者本人所有。 除非无法确认推送的文章,否则我们会注明作者和出处。 如出处有误或侵犯原作者权益c语言变量名的命名规则,请联系我们删除或授权。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。