本文共 1517 字,大约阅读时间需要 5 分钟。
怎样写出工业级的C代码
1. 层次分明;结构清晰 ,模块划分
2.重要tips
a.从词法的角度来看,
熟悉C运算符号的优先级,特别是不能混淆=/&&/+-和移位等操作符之间的顺序:
常见容易混淆的顺序包括:
算术加减和移位操作:a>>b+1表示a>>(b+1),而非(a>>b) + 1;
自加/减和->/.运算符号:a->b.c; ++a->b
理解编译器对符号解析处理的过程:比如a+++b,到底是a++ +b还是a+ ++b;
if ( a = b != c) {};
b.从语法的角度
嵌套注释不提倡,大部分编译器也不支持;
对宏的定义注意前提和局限:
比如 #define max(A,B) A > B? A : B 改成
#define max(A,B) (A)> (B) ? (A) : (B)在A或者B中含有自加或者自减操作的时候也可能出错;
理解assert()宏内部的实现;
c.从语义的角度
即使某些看上去没有问题的代码,实际由于堆栈布局、内存分布、表示方法的局限也可能出现不是所期望的代码,比如下面的这些代码:
1 . int (int b)
{
return -b;
)
2. int test()
{
int ii;
char c
for (ii=0;ii < 5; ii++)
scanf(“%d”, &c);
}
3. int a[10];
for (i=0; i<=10;i++)
a[i] = I;
4. char * getname(char * myname)
{
char * local_name;
local_name = “Huogo”;
strcpy(myname, local_name);
return local_name;
}
5. int a =5; int b = -3;
int c = a / b;
int d = a % b;
6. int a = random();
int b = random();
int C = MAX_INT;
if (a + b < c) {
….
}
if ( a * b < c) {
…..
}
7. int mask = 0xffffff00;
long in_addr = …...;
long out_addr = 0;
out_addr = mask & in_addr;
8. int x =;
// get half of x
half = x >> 1;
9. at a.c:
char name[5];
at b.c
extern char * name;
10. int a[3][5];
int * pa[] = a;
int * pb = a[0];
int * pc = &[0][0];
pa++;
pb++;
pc++;
11.过多假定:
toUper(char c)
{
if (c <= 'z' && c >= 'a') {
return c + 'A' – 'a';
}
return c;
}
int get_array_size(int * array, int len)
{
return len<<2;
}
12. unsigned c;
unsigned char b;
int d;
d = c;
b = c;
13. char c = getchar();
while ( c != EOF) {
c = getchar();
}
本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1754119 ,如需转载请自行联系原作者