优雅的命名规范
命名不规范是代码可读性、可维护性、可理解性差的罪恶之源。遵守大家都习惯的命名规范能够大大提高可读性,而且你也不用在命名上浪费时间了。我特别喜欢一个词elegant,写出优雅的代码,亦或优雅地写代码。
变量命名前缀篇
变量命名我习惯使用前缀表示类型,这样能让人一眼就知道你这个变量的类型,而不用去跳转到声明处。
- bool布尔: b
- byte字节:by
- char字符:ch
- string字符串: str
- char[]字符数组: sz
- int整数: i或者n
- long长整数: l
- long long长长整数: ll
- float浮点数: f
- double双精度浮点数: lf
- WORD单字: w
- DWORD双字: dw
- 指针:p
- 数组:a
- 结构体:st或t
- 类:c
- 枚举:e
- 类成员变量:m_
- 静态变量:s_
- 全局变量:g_
- 函数: fn
函数命名动词篇
我习惯使用小写动词+大写名词的驼峰法,例如getPswd。
你还在为不知道取什么名字而烦恼吗,试试下面的方法:
使用反义词:
- get/set
- take/release
- push/pop
- add/insert/remove
- new/delete
- create/destroy
- alloc/free
- open/close
- start/stop
- read/write
- recv/send
- up/down
- next/prev
- upload/download
- load/unload
- lock/unlock
- show/hide
- enter/leave
其它常用动词
- mod(
modify的缩写
) - save
- change
- swtich
- query
- search
- is
- check
- test
- cut
- copy
- undo
- unset
- kill
- exit
- bind
- clone
- clear
- handle
- make
- find
- rfind
- replace
- cvt(
convert的缩写
) - 还有一个万能的do
- 对于消息响应函数习惯以on开头
这么多动词总有一款适合你的,实在不行请有道下,切忌用拼音。
头文件防止重复包含
#ifndef XXX_H
#define XXX_H
//...
#endif // XXX_H
导入导出宏
#define XXX_CALL _stdcall
#ifdef XXX_LIB
#define XXX_API
#else
#ifdef XXX_DLL
#define XXX_API extern "C"__declspec(dllexport)
#else
#define XXX_API extern "C"__declspec(dllimport)
#endif
#endif
结构体字节对齐方式
#ifdef WIN32
#pragma pack(push)
#pragma pack(1)
#define GCCPACKED
#else
#define GCCPACKED __attribute__((packed))
#endif
// 在此声明结构体
struct XXX{
//...
}GCCPACKED;
#ifdef WIN32
#pragma pack(pop)
#endif
使用命名空间
namespace XXX{
//...
}
原则篇
1、命名要尽可能的精简,臭长代码没人爱;
2、一眼看不出类型和作用的变量不是好命名;
3、一眼看不出作用的函数不是好命名;
4、杜绝三次以上重复代码,如果出现请考虑使用#define、inline、function代替;
5、杜绝三层以上嵌套,可以使用如下方式替代:
if (!b1)
return;
do1();
if (!b2)
return;
do2();
if (!b3)
return;
do3();
而不是
if (b1){
do1();
if (b2){
do2();
if (b3){
do3();
}
}
}
6、多余注释代码请删除干净,没有人会再重新启用你的烂代码;
7、switch大量的case可以考虑使用宏定义或者表驱动;
8、不要制造庞然大物的类、文件,滚屏真的看的眼花;