-
Notifications
You must be signed in to change notification settings - Fork 1
/
编程注意事项.txt
50 lines (44 loc) · 1.35 KB
/
编程注意事项.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1、 资源分配释放尽量在同一层次,分配时要注明何时释放,用时才申请
2、 禁止使用结构体作为函数的参数或返回值
3、 多层入参在使用前检查
4、 256字节以下不用malloc,1K以上malloc
5、 打印、拼接字符串统一用%s,避免字符串内部有特殊含义字符。
6、 算术操作要检查变量翻转。
7、 断言函数是平台改写的,用时只能含表达式,正常逻辑不允许用断言,中断、内存申请失败不使用断言。
8、 指针做为函数参数传出时不可以强转类型
9、 Else if 后必须跟else,相当于switch的default分支
10、逻辑检查要包含完整集合,写完代码对检查参数搜索一遍,如>要有<=配对 <要用>=配对,不能有> <的
11、判断先处理特殊值,再处理一般值
12、循环中不能直接用return,只用brek或者continue
13、模块之间接口加debug信息
14、串行流程正反顺序要对称 如设置函数为 A->B->C 删除函数必须为C->B->A
15、其他模块接口数据尽量获取/设置一次,内部使用用保存值
16、出参尽量保持一个
17、修改代码要检查所有调用该接口的地方
18、全局变量要封装get,set函数
19、id用有符号整型,无效填-1
20、设置、修改操作要判断是否存在
一般函数结构()
{
Ret = true;
先检查出参指针
出参赋默认值
入参合法性检查(指针(要逐级检查),数组下标,变量范围);
逻辑有效性检查[1];
逻辑有效性检查[2];
。。。
变量赋初始值
。。。
if (是自己的值)
if (值有效性)
for()
{
循环变量赋初始值
。。。
}
。。。
Return ret;
}
字符串拼装:
#define DRV_ssprintf(uiCurPos, pcBuf, uiBufLen, args...) \
((uiCurPos) += (UINT)scnprintf((pcBuf) + (uiCurPos), (uiBufLen) - (uiCurPos), ## args))