常见的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 不要 ...
随机推荐
- Prometheus入门到放弃(5)之AlertManager部署
alertmanager与exporters.cadvisor一样,都是独立于prometheus项目,这里我们也使用docker方式部署alertmanager. 1.下载镜像 镜像地址:https ...
- 嵌入式02 STM32 实验04跑马灯
开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...
- linux系统状态脚本
#!/bin/bashprintf "%10s\n" "##主机名##"printf "%-10s\n" "$(hostname) ...
- 『Go基础』第1节 Go语言简介
1. Go语言简介 Go语言起源于2007年, 并于2009年开源. Go语言是一门全新的静态类型开发语言, 具有自动垃圾回收, 丰富的内置类型, 错误处理, 并发编程等特征.
- 记录:拷贝gitblit里的项目使用git命令clone、pull、push等,出现一直在加载,卡住没反应的问题
俺想克隆别人gitblit里的其中一个版本库(俺在别人gitblit有权限) 懂得git的道友们,都应该知道克隆一个公共项目,随便找到,打开git终端,输入git clone 项目地址就行了 到了俺这 ...
- 接口标记为@ResponseBody却不进入ResponseBodyAdvice
一.背景: 我们的接口为了统一,在ResponseBodyAdvice中对返回值做统一处理,默认添加了errorNo和errorInfo字段返回. 最近同事改接口代码的时候,发现接口返回值是空的.乍一 ...
- 修改Excel脚本
批量修改Excel TODO: 批量修改Excel 功能: 将图片防止在本地,读取excel数据,拆分数据之后根本地照片名称对比,然后上传服务器,创建新得excel. #!/usr/bin/pytho ...
- Flutter Animation AnimatedBuilder
Flutter AnimatedBuilder 创建动画的widget Key key, @required Listenable animation, @required this.builder, ...
- LVS简单理解
LVS LVS(Linux Virtual Server)即Linux虚拟服务器 目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案 终端用户 ...
- Vue 使用技巧手记
watch监听 Vue监听属性有很多种写法,也有几个配置选项 使用配置项 new Vue({ watch:{ content:{ handler(old,newVal){ console.log(ol ...