17、C/C++编程规范精述
C/C++编程规范精述
(匈牙利命名法)
1、排版上不同小结构间要空行分开,子逻辑项相对父逻辑项要缩进;{及if,while等判断语句应独占行并对齐,且后加空格以显突出。
2、注释位于相应代码上面或右旁边。且与其它代码空行或空格隔开。
3、变量命名风格:采用UNIX 的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,但用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。
定义标识符(变量名/函数名)应体现code is document:类型的第一个字母小写组合 + 有意义的单词。全局变量和函数名前应加模块名。
如DWORD dwSum = 0;
定义变量应当初始化,尤其是在使用前。
全局变量/静态变量要注意可重入性(经过处理才可以)。结构定义应当尽是以4字节(32位CPU一个指令就可以存取)对齐的。typedef 结构体时,不应当只定义指针。
注意一下宏定义:#define MPPLNX_DUMP_READ_WRITE_CDB(x) ...
注:可重入性是指函数可以被多个任务进程调用;一个可重入的函数简单来说就是可以被中断的函数,也就是可以在这个函数执行的任何时刻中断它,OS调度转入去执行另外一段代码,而返回控制时不会出现错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题。
满足下列条件的函数多数是不可重入的:
1) 函数体内使用了静态的数据结构;
2) 函数体内调用了malloc()或者free()函数;
3) 函数体内调用了标准I/O函数。
4、语句结构上,涉及有意义的常量,应当用枚举或宏来代替;常量放在变量的左边;用小括号来体现优先级。<<等逻辑关键字前后加空格。函数功能应当单一。
输入参数的合法性检查:
1)外部模块或者用户输入的参数;
2)从物理链路上接收到的数据。
5、可测性上,代码自始至终只有一份,不存在开发版本和测试版本;测试与最终发行的版本是通过编译开关的不同来实现,编译开关要规范统一。
使用断言来发现软件问题;注意:在Release版本下,assert被定义成空操作(不执行),所以如下写法是不对的:assert(E1T1_OK == E1T1_SetDefaultFramingMode());
6、程序效率上,循环体内工作量最小化,被信号量保护的区域应该尽可能小。
7、质量上,内存分配上,一般秉承谁申请,谁释放,也样:文件句柄;尤其是有异常退出的地方。内存释放后,一定要把指针置为NULL。
内存越界问题。
Unix下,多线程的中的子线程退出必需采用主动退出方式,即子线程应return出口。
不要滥用不等于禁止使用。goto使用的注意事项:
• Single entry, single exit? – use goto
• Don’t use more than one goto labels
• Use goto’s that go forward, not backward
• Make sure a goto doesn’t create unreachable code
用宏定义表达式时,要使用完备的括号;参数可能发生变化的表达式不要使用宏。
8、类属性的声明应按照如下顺序常量 -> 静态变量 -> 非静态变量public -> protected -> private