C/C++代码规范笔记

找到一份《C++代码规范》的小册子,作者codekitten,写得不错,逻辑清晰,排版规范,值得一看。

全书分为六章,分别是文件结构、排版、命名、代码设计、注释和其它杂项,节选其中部分我认为比较重要的算作读书笔记,有少许修改和注释。

1 文件结构

1.1.1   防止头文件被重复引用,应当用ifndef/define/endif 结构产生预处理块(注:一般使用头文件名作为宏名,如果文件名包含多个单词,用下划线分隔,全部大写,如#define _THUMB_ATTRI_H

1.1.4   非模板类,将类的声明写在头文件中,类中内联成员函数或模板成员函数的实现写在类声明之后头文件之内,类中非内联函数和非模板函数的实现则写在.cpp 文件中

1.1.5   模板类,类的声明写在.h 头文件中,类的成员函数实现也写在头文件中,位于类声明之后。(注:记得模板类中,如果把函数实现分开放在.cpp文件中,g++编译是通不过的)

2 排版风格

2.1.1   缩进最好用四个空格,尽量不要用tab(注:原因大概因为不同编辑器对tab的显示宽度不同吧,vim里是可以设置tab宽度的,另外set et命令可以设置tab自动扩展为空格)

2.3.2   双目运算符前后一般加空格(注:这个有例外,比如多重括号里面,但一般独立语句中保持此规范)

2.3.3   单目运算符前后不加空格

2.3.9   应当将修饰符*和&紧靠变量名,空格留在修饰符后面(注:不记得哪里看到过相反的说法,写过一阵int* p;不过现在觉得还是int *p;更符合一般人的习惯)

2.4.1   for语句等,无论执行语句部分有多少都要加括号"{}"(注:不要觉得少用一对括号程序就简短,这样做容易隐藏难以察觉的bug)

2.4.3   将public 类型的函数写在前面,采用这种版式主张类的设计“以行为为中心”,重点关注的是类应该提供什么样的接口或服务

2.4.4   代码行最大长度宜控制在80 个字符以内,代码行不要过长,注意拆分(注:这点在linux终端里很有体会)

2.4.5   尽量在定义变量时完成初始化(注:C里不支持中途声明变量,但C++里没有问题)

3 命名规范

3.1.4   程序中不要出现标识符完全相同的局部变量和全局变量(注:虽然没有语法错误,但不利于阅读)

3.2.2   类名组成单词首字母均大写(如class MyClass;

3.3.1   接口名以大写I开头,组成单词首字母均大写(如class IMyInterface;

3.4.4   函数名第一个单词首字母小写,其余单词首字母均大写(如void setValue(...);

3.5.2   变量名与函数名类似(如string cityName;

3.5.5-7   全局变量前加 g ,静态变量前加 s ,成员变量前加 m ,指针前加 p (注:个人更喜欢在类的成员变量前加下划线 _ )

3.6   结构体命名与类名类似,在名称前加大写 S

3.7   枚举命名与类名类似,在名称前加大写 E ,成员名全部大写

4 代码设计

4.2.1   不可将布尔变量直接与TRUE,FALSE 或者1,0 进行比较,推荐 if(!flag) 方式

4.2.2   将整型变量用"=="或"!="直接与0 比较,推荐 if(k == 0) 方式

4.2.3   不可将浮点变量用"=="或"!="与任何数字比较,应该设法转化成">="或"<="形式,推荐转换成 if((x>=EPSINON) && (x<=EPSINON)) 方式(注:应尽量避免利用浮点变量进行 == 比较判断)

4.2.4   将指针变量用"=="或"!="与NULL 比较而不是0,推荐 if(p == NULL) 方式

4.2.6   switch 语句中,每个case 语句的结尾不要忘了加break,除非故意为之

4.3.1   多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层

4.3.2   循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面

4.5.3   非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,内部数据类型则相反

4.5.6   不要将正常值和错误标志混在一起返回,正常值用输入参数获得,而错误标志用return 语句返回(注:尽量不要使用返回一个特殊值作为错误标志这种小技巧,除非这个特殊值永远没有可能成为结果值)

4.5.7   有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值

4.5.11   少用static局部变量,程序容易不可控

4.5.19   inline 关键字应该只与函数定义体放在一起,而不是声明

4.5.20   inline函数要短小,不能有循环、开关语句,不能有递归(注:否则声明了inline也徒劳)

4.5.21   任何不会修改数据成员的函数都应该声明为const 类型

4.6.1   申请堆内存,不排除失败的情况,应该立即检查指针值是否为NULL

4.6.5   free 或delete 释放了内存之后,立即将指针设置为NULL,防止产生“野指针”

4.7   (注:这里不赘述,Effective C++讲得更详细)

5 注释规范

5.2.1-3   在.h文件、.cpp文件开头注明基本信息;在函数开头注明函数功能、参数、输出等

5.2.4-6   对类成员、常量、枚举成员、结构体成员注明含义

(END)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值