linux编程规范小结
1、函数:(子)模块接口函数大写字母开头: AddUser()
(子)模块内部调用函数小写字母开头:addUser()
接口函数/回调函数以‘__’+ 大写字母开头: __AddUser
2、变量:单词小写,以下划线连接
全局变量以g_为前缀
静态变量以s_为前缀
3、类型:单词以大写字母开头,不包含下划线
类型包括结构体、类型定义(typedef)、枚举
枚举值应全部大写,单词间以下划线相连
4、文件:单词小写,以下划线连接
.c 文件与对应的.h 文件、命名保持一致
Power_manager.c、power_manager.h、
头文件不与标准库头文件重名
5、排版:
1)行宽不超过80 个字节,超过80 个字节的语句做换行处理。
2)不留2 个以上的空行。
3)相对独立的程序块之间应该有空行。
4)缩进以4 个空格替换TAB。
5)不留冗余空格
6)应当添加空格的处理
(1) 逗号后面加空格
(2) 二目、三目运算符加空格
if、for、while、switch 等与后面的括号间应加空格
7)不应当添加空格的处理
(1)左括号后、右括号前不加
(2)单目操作符前后不加空格
(3)"->"、"."前后不加空格
6、条件语句
1)if/switch/while/for等条件判断语句、左大括号、右大括号,独立站一行
2)所以条件分支语句不论行数多少,都应当加大括号
3)switch语句
(1)case块需用大括号包含。
(2)case关键字与switch关键字保持4个空格缩进。
(3)break关键字与case关键字对齐,且break关键字在大括号内。
(4)必须包含default处理。
7、安全
(1)必须了解编译系统的内存分配方式,特别是编译系统对不同类型的变量的
内存分配规则,如局部变量在何处分配、静态变量在何处分配等。
禁止内存操作越界。内存操作主要是指对数组、指针、内存地址等的操作。
(2)避免内存越界:
1) 数组的大小要考虑最大情况,避免数组分配空间不够。
2) 避免使用危险函数sprintf /vsprintf/strcpy/strcat/gets操作字符串,使用相对
安全的函数snprintf/strncpy/strncat/fgets代替。
3) 使用memcpy/memset时一定要确保长度不要越界
4) 字符串考虑最后的’\0’,确保所有字符串是以’\0’结束
5) 指针加减操作时,考虑指针类型长度
6) 数组下标进行检查
7) 使用时sizeof或者strlen计算结构/字符串长度,避免手工计算
(3)禁止栈溢出
不同操作系统的堆栈空间不一样,对于melis 系统,堆栈空间更小,不能不加限制 地使用栈空间,坚持以下措施可避免栈溢 出:
1)不以结构体类型作为函数入参,以对应数据类型指针传递。
2)局部变量总和大小不能太大,建议不要超过512Byte。
(4)禁止内存泄漏:内存和资源(包括定时器/文件句柄/Socket/队列/信号量/GUI等各资源)泄漏是常见的错误。坚持下列措施可以避免内存泄漏:
1) 坚持谁申请谁释放原则,
2) 异常出口处检查内存、定时器/文件句柄/Socket/队列/信号量/GUI 等资源是否
全部释放
3) 删除结构指针时,必须从底层向上层顺序删除
4) 使用指针数组时确保在释放数组时,数组中的元素指针是否已经提前被释放了
5) 避免重复分配内存
6) 小心使用有return、break 语句的宏,确保前面资源已经释放
7) 检查队列中每个成员是否释放
8、效率
1)循环体:仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量 最小,从而提高程序的时间效率。应将最忙的循环放在最内层,减少CPU 切入循 环层的次数。
2)避免循环体内含判断语句,应将循环语句置于判断语句的代码块之中。