博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样写出工业级的C代码 (2)
阅读量:6040 次
发布时间:2019-06-20

本文共 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 ,如需转载请自行联系原作者

你可能感兴趣的文章
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
AngularJs ng-change事件/指令(转)
查看>>
linux系统下安装两个或多个tomcat
查看>>
ProtoBuffer 简单例子
查看>>
iOS多线程开发系列之(一)NSThread
查看>>
微信小程序初体验(上)- 腾讯ISUX社交用户体验设计成员出品
查看>>
SAP WM Physical Inventory Method ST & PZ
查看>>