分类:
2009-10-28 16:45:15
风格
1.1名字
全局变量使用具有说明性的名字,局部变量用短名字
按常规方式使用的局部变量可以采用极短的名字。例如用i、 j作为循环变量,p、q作为指针,s、t表示字符串等。
保持一致性
相关的东西应该给相关的名字,以说明它们的关系和差异
函数采用动作性的名字
函数名应当用动作性的动词,后面可以跟着名词。对返回布尔类型的函数命名,应该清楚地反映其返回值的情况例如:checkoctal(ch)就不如isoctal(ch)好。
1.2表达式和语句
使用表达式的自然形式
例如:if(!(block_id < actblks) || !(block_id >= unblocks))
改后:if(block_id >=actblks) || (block_di < unblocks))
用加括号的方式排除二义性
分解复杂的表达式
例如:*x += (*xp=(2*k < (n-m) ? c[k+1]: d[k--]));
改为:
if(2*k < n-m)
*xp = c[k+1];
else
*xp = d[k--];
*x += *xp;
当心副作用
像++之类的运算符在使用的时候要注意其副作用
1.3一致性和习惯用法
使用一致的缩排和加括号风格
特定风格远没有一致地使用它们重要。
为了一致性,使用习惯用法
循环的惯用法:
for(i = 0; i < n; i++)
array[i] = i;
链表的标准循环:
for(p = list; p != NULL; p = p->next)
………
无穷循环:
for(;;) 或者 while(1)
分配空间:
p = malloc(strlen(buf) + 1);
strcpy(p, buf);
//strlen求出的值没有计入串结尾的’\
用else-if表达多路选择,case语句要有break配合使用。
1.4函数宏
避免使用函数宏
给宏的体和参数都加上括号
例如:#define square(x) (x) * (x)
改后:#define square(x) ((x) * (x))
1.5神秘的数
给神秘的数字起个名字
把数定义为常数,不要定义为宏
C++:
const int MAXROW = 24, MAXCOL = 80;
Java:
static final int MAXROW = 24, MAXCOL = 80;
C:
enum{MAXROW = 24, MAXCOL = 80};可以直接引用MAXROW
使用字符形式的常量,不要用整数
for(c >= ‘A’ && c <= ‘Z’)
…….
利用语言去计算对象的大小
char buf[1024];
fgets(buf, strlen(buf), stdin);
定义数组的元素个数
#define NELEMS(array) (sizeof(array) / sizeof(array[0])
double dbuf[100]
for(I = 0; I < NELEMS(dbuf); i++)
………
1.6注释
不要大谈明显的东西
给函数和全局数据加注释
不要注释差的代码,重写它
注释不要与代码矛盾,在更改代码后,记得更改注释