《改善C++程序的150个建议》

1、不要让main函数返回void,并且建议显式的调用 return 0;

2、区分0的4种面孔:整型0、空指针NULL、字符串结束标志 '\0'、逻辑false。

前两者都占32位,推荐在置空指针或比较指针时,使用NULL,如 int* i = NULL; if (i == NULL);  第三种是一个字符,占8字节。如 "Hello" 只有5个字符,却要分配6字符空间;第四种占用一个字节

3、不要忘记对局部指针变量的初始化,可以设置为NULL,否则会报警告;但对于全局指针变量来说,编译器会自己完成对它的初始化,不会报警告。

4、逗号表达式的值为最右边表达式的值,如 while(i++,j--)

5、拒绝晦涩难懂的函数指针。一般函数指针用于运行时函数回调,使用 typedef 简化。

6、防止包含重复的头文件,一个是使用 #ifndef 方式,一个是使用 #pragme once ,前者受C/C++标准支持,但每次编译时都需要打开头文件才能判定是否有重复定义,因此编译大型项目时较长,另外如果取名有重复,也会有问题。后者不受C/C++标准支持,仅受编译器支持,不过编译速度提升。(该书说GCC已经取消了对其的支持,难道是最新版的?有空试一下)。如果使用前者,可以采用GOOGLE建议的, _<PROJECT_PATH>_<FILE>_H_

7、优化结构体中的元素布局。 如 struct A{ int a; char b; short c;};      struct B{ char b; int a; short c;};   则 sizeof(A) == 8   sizeof(B) == 12

可以使用  #pragma pack(n) 来设置结构体的对齐方式,默认为8,可以设为1,则上面结构体的长度为7。

字节对齐的三个原则:

一、结构体首字址能够被最宽基本类型成员的大小所整除。(没明白)

二、每个成员相对结构体首地址的偏移量都为自身大小的整数倍。

三、结构体总大小为结构体最宽基本类型成员大小的整数倍。

编程应用中,如果空间紧张,需要考虑节约空间,则将结构体中的变量按类型大小从小到大依次声明。

 

 

 

 

 

posted @ 2013-03-18 20:52  轻典  阅读(794)  评论(0编辑  收藏  举报