常见的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 不要 ...
随机推荐
- C++静态成员变量必须定义
静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存,否则不能使用,编译不会通过. class A { public: static int a; //声明但未 ...
- Kafka Streams | 流,实时处理和功能
1.目标 在我们之前的Kafka教程中,我们讨论了Kafka中的ZooKeeper.今天,在这个Kafka Streams教程中,我们将学习Kafka中Streams的实际含义.此外,我们将看到Kaf ...
- c++基础(六)——动态内存
在我们的程序中,静态内存——用来保存局部 static 对象,类 static数据成员,以及定义在任何函数之外的变量.栈内存——用来保存定义在函数内的非 static 对象.分配在 静态内存 或 栈 ...
- flask框架(二)——flask4剑客、flask配置文件的4种方式
之前学习的Django有必备三板斧:render,HttpResponse,redirect,JsonResponse 在flask也有,但是有些不同 一.Flask4剑客 1.直接返回字符串(ret ...
- Django的Xadmin使用
Django Xadmin 通常在实际的开发当中, 除了前后端分离的项目, 还有一些前后端不分离的项目, 这样我们在访问不分离的页面的时候, 就可以通过Django自带的admin管理模块来轻松实现后 ...
- openstack-nova源码之创建虚拟机
1.nova/api/openstack/compute/servers.py create() 在create函数前面包含三种装饰器,分别为:@wsgi.response.@wsgi.expect ...
- PL/SQL不安装ORACLE客户端
1.oracle官网下载instantclient,将包解压存放到本地. 在这个路径下D:\oracle-basic\instantclient_12_2\network\admin放入TNS文件. ...
- Linux操作系统六大优点
打开百度App,看更多图片 1.免费开源.Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制. 2.模块化程度高.Linu ...
- 前端开发 Vue Vue.js和Nodejs的关系
首先vue.js 是库,不是框架,不是框架,不是框架. Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. Vue.js 的核心是一个允许你 ...
- 12 Mapping查询
查看 某个index下所有type的mapping GET /beauties/_mapping 查看 指定index.指定type的mapping GET /beauties/_mapping/cn