常见的C语言编程规范
头文件:
1.头文件中适合放置接口的声明,不适合放置实现。
2.头文件应向稳定的方向包含,产品依赖于平台,平台依赖于标准库。
3. .c/.h文件禁止包含用不到的头文件。
4.每一个.c文件应有一个同名.h文件,用于声明需要对外公开的接口。
5.禁止头文件循环依赖。
6.头文件应当自包含(任意一个头文件均可独立编译)。
7.禁止在extern"C"中包含头文件。
8.禁止在头文件中定义变量,如果头文件被其他文件包含,会引发重复定义。
9.只能通过包含头文件的方式使用其他.c提供的接口,禁止在.c中通过extern的方式使用外部函数接口、变量。
10.如果一个模块包含多个子模块,则建议每一个子模块提供一个对外的.h,文件名为子模块名,降低接口使用者的编写难度。
编码:
1.函数不变参数使用const。
2.全局变量应增加“g_”前缀。
3.静态变量应增加“s_”前缀。
4.在源文件范围内声明和定义的所有函数,除非外部可见,否则应该增加static关键字。
5.通讯过程中使用的结构,必须注意字节序。对于跨平台的交互,数据成员发送前,都应该进行主机序到网络序的转换;接收时,也必须进行网络序到主机序的转换。由于位域在不同字节序下,表现看起来差别更大,所以更需要注意。
6.函数调用不要作为另一个函数的参数使用,否则对于代码的调试、阅读都不利。
7.函数break,return时一定要注意资源的释放,比如释放申请的内存、释放锁。
8.禁止内存操作越界。
坚持下列措施可以避免内存越界:
(1)数组的大小要考虑最大情况,避免数组分配空间不够。
(2)避免使用sprintf/vsprintf/strcpy/strcat/gets操作字符串,使用相对安全的函数
snprintf/strncpy/strncat/fgets代替。
(3)使用memcpy/memset时一定要确保长度不要越界。
(4)字符串考虑最后的'\0',确保所有字符串是以'\0'结束。
(5)指针加减操作时,考虑指针类型长度。
(6)数组下标进行检查。
(7)使用时sizeof或者strlen计算结构/字符串长度,避免手工计算。
9.禁止内存泄漏。
坚持下列措施可以避免内存泄漏:
(1)异常出口处检查内存、定时器/文件句柄/Socket/队列/信号量/GUI等资源是否全部释放。
(2)删除结构指针时,必须从底层向上层顺序删除。
(3)使用指针数组时,确保在释放数组时,数组中的每个元素指针是否已经提前被释放了。
(4)避免重复分配内存。
(5)小心使用有return、break语句的宏,确保前面资源已经释放。
(6)检查队列中每个成员是否释放。
10.禁止引用已经释放的内存空间。
坚持下列措施可以避免引用已经释放的内存空间:
(1)内存释放后,把指针置为NULL;使用内存指针前进行非空判断。
(2)耦合度较强的模块互相调用时,一定要仔细考虑其调用关系,防止已经删除的对象被再次使用。
(3)避免操作已发送消息的内存。
(4)自动存储对象的地址不应赋值给其他的在第一个对象已经停止存在后仍然保持的对象(具有更大作用域的对象或者静态对象或者从一个函数返回的对象)。
常见的C语言编程规范的更多相关文章
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- linux shell语言编程规范安全篇之通用原则【转】
shell语言编程规范安全篇是针对bash语言编程中的数据校验.加密与解密.脚本执行.目录&文件操作等方面,描述可能导致安全漏洞或风险的常见编码错误.该规范基于业界最佳实践,并总结了公司内部的 ...
- C语言编程规范
C语言编程规范 6 函数与过程 6.1 函数的功能与规模设计 函数应当短而精美,而且只做一件事.不要设计多用途面面俱到的函数,多功能集于一身的函数,很可能使函数的理解.测试.维护等变得困难. 6.2 ...
- C语言编程规范试题(标准答案)
C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5 B D A C B 1.6-1.10 C A D B C 1.11 ...
- C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
- Uber Go 语言编程规范
目录 Uber Go 语言编程规范 1. 介绍 2. 编程指南 3. 性能相关 4. 编程风格 5. 编程模式(Patterns) 6. 总结 Uber Go 语言编程规范 相信很多人前两天都看到 U ...
- C++语言编程规范
前言 这里参考了<高质量C++C 编程指南 林锐>.<google C++编程指南>以及<华为C++语言编程规范>编写了这份C++语言编程规范文档,以合理使用 C+ ...
- Golang语言编程规范
Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰 ...
- 单片机C语言编程规范
一.基本要求 1.1 程序结构清析,简单易懂,单个函数的程序行数不得超过100行. 1.2 打算干什么,要简单,直接了当,代码精简,避免垃圾程序. 1.3 尽量使用标准库函数和公共函数. 1.4 不要 ...
随机推荐
- [转帖]Redis性能解析--Redis为什么那么快?
Redis性能解析--Redis为什么那么快? https://www.cnblogs.com/xlecho/p/11832118.html echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加e ...
- 【C++札记】内联函数
概述 函数的使用使得相同代码不必多次重写,但会带来额外的开销,函数调用的过程中会有入栈和出栈,这些都会消耗时间. 如果一个函数在程序运行过程中被成千上万次调用,那么这个开销也是不容忽视的,C++中引入 ...
- 函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!闭包访问局部变量
函数内部声明变量的时候,一定要使用var命令.如果不用的话,你实际上声明了一个全局变量! function f1(){ n=999; } f1(); alert(n); 子函数可以一层一层读取到父元素 ...
- .Net Jpush极光推送
1.首先登陆极光官网注册账号 https://www.jiguang.cn/push 2.注册成功后,在应用管理中创建应用
- NEST search查询
/// <summary> /// GET /megacorp/employee/_search /// </summary> /// <returns></ ...
- iOS - Target-Action机制创建自己的UI控件需要了解的知识
我们在开发应用的时候,经常会用到各种各样的控件,诸如按钮(UIButton).滑块(UISlider).分页控件(UIPageControl)等.这些控件用来与用户进行交互,响应用户的操作.我们查看这 ...
- 【转载】Asp.net网站安全:去除网站根目录下的备份文件防止代码泄露
很多网站运维人员在更新网站版本的时候,喜欢直接在网站目录文件夹中直接压缩原来的网站文件,如果这个备份压缩文件没有移动出去,这样是非常不安全的,有些网站攻击者可能会尝试访问你网站下有没有对应名字的压缩备 ...
- 用JS实现一个斗地主发牌器
//调用随机数,在我上一篇博文讲过这一个函数. function roundNum(min = 0, max = 0) { if (!isNaN(min) && !isNaN(max) ...
- Ubuntu恢复默认界面命令
命令: dconf reset -f /
- Ubuntu安装usb库
sudo pip install pyserial sudo pip install pyusb