编程规范

1变量的命名规则

作用域 + 匈牙利命名规则 + 驼峰命名规则 + 设计意图

1.1作用域

全局变量: g_ 

类成员变量: m_

局部变量: 无

 

1.2匈牙利命名前缀(常用)

arr 数组

b 布尔型(bool)

c 字符(char)

n   带符号短整形(short)

i 带符号整形(int)

u 无符号整形(unsinged int)

l 带符号长整形(long)

ul 无符号长整形(unsinged long)

s 字符串(string)

h 句柄(HANDLE)

p 指针(pointer)

fn 函数变量(function)

w 无符号整形(字 WORD)

dw 无符号长整形(双字 DWORD)

by 字节(byte)

 

vec vector<>

map Map<>

lst list<>

1.3变量含义

设计命名应该尽量体现变量、函数的设计意图(作用、功能)。有歧义、让人揣测的都是不好的命名。

 

1.4数据库字段变量

数据结构表示数据库表格字段值的变量,应与数据库字段名称相同。

 

2.1指针的使用
初始化:
全局变量指针:声明处 初始化。(尽量避免使用全局变量)
类成员指针:  类初始化列表 初始化。(c++ 要求,先于构造函数)
函数局部变量指针:声明处 初始化。

使用:
全局变量指针:声明处 空值判断。(if (NULL == pPointer))
类成员指针:使用前进行 空值判断。(if (NULL == pPointer))
函数传入指针:函数入口处进行 空值判断。(if (NULL == pPointer))
函数内部指针:使用前进行 空值判断。


2.2参数传递
C++ 参数传递为按值传递,传递过程有赋值过程

常用类型: 直接传递(有赋值过程)

自定义类型:引用传递(无赋值过程)
自定义类型的赋值过程调用构造函数,资源消耗大。

注:非引用传值的函数体对参数的操作不会对函数外目标产生效果。

void func(int iValu)
{
iValu = 3;
}

int iValu = 4;
Func(iValu);

执行期,Func()函数体内iValu 是另一IValue 对象,互不影响。

 

2.3一行代码的定义

避免以下风格

void func(void){

}

If (bStatus)

{

}bStatus = true;

 

{ }均独立占一行,一行只有一个执行语句

void func(void)

{

}

If (bstatus)

{

}

Bstatus = false;

 

2.4宏定义

避免在程序中使用神秘数字作常量, 常量均需大写

避免 数字 + //注释,不依赖这样的注释,会增加后续的维护成本

注意: const /enum 的使用

 

const int PATH_MAX_LENGTH = 256;

enum 

{

PATH_MAX_LENGTH = 256,

}

 

2.5用函数体替代代码段
避免函数体内代码函数过长。理想的长度:屏幕一页可覆盖


将创建视图代码放到函数体内
将数据结构的初始化放到函数体内
将添加过程放到函数体内

用函数名将代码段的含义总结出来,更易于阅读,执行步骤更清晰

函数体的设计应:功能单一,粒度合理。

 

2.6if ...else /switch ..case
关键字的成对出现,考虑无效情况,默认情况。

结合日志打印、调试手段 assert(),可以帮助定位程序跑飞位置

 

2.7文件单独可编译原则
单独的头文件*.h和 定义*.cpp 文件可以单独编译


头文件包含的文件越多,编译所依赖的文件也越多。

引入类型的前置声明/前向声明可以降低这种编译依赖。


2.8通常情况下应禁止使用GOTO语句
Goto 语句对破坏了代码逻辑

Goto 语句后续代码逻辑的维护成本比较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值