C语言编程规范

2018 /10

图片来源于网络

C语言入门到精通

公众号

闫小林

C是一门朴素的语言,它是大部分程序员的入门语言,那么C语言的常见编程规范都有哪些呢

1

头文件:

1.头文件中适合放置接口的声明,不适合放置实现

2.头文件应向稳定的方向包含,产品依赖于平台,平台依赖于标准库

3. .c/.h文件禁止包含用不到的头文件

4.每一个.c文件应有一个同名.h文件,用于声明需要对外公开的接口

5.禁止头文件循环依赖

6.头文件应当自包含(任意一个头文件均可独立编译)

7.禁止在extern"C"中包含头文件

8.禁止在头文件中定义变量,如果头文件被其他文件包含,会引发重复定义

9.只能通过包含头文件的方式使用其他.c提供的接口,禁止在.c中通过extern的方式使用外部函数接口、变量

10.如果一个模块包含多个子模块,则建议每一个子模块提供一个对外的.h,文件名为子模块名,降低接口使用者的编写难度

2

编码:

1.函数不变参数使用const

2.全局变量应增加“g_”前缀

3.静态变量应增加“s_”前缀

4.在源文件范围内声明和定义的所有函数,除非外部可见,否则应该增加static关键字

5.函数调用不要作为另一个函数的参数使用,否则对于代码的调试、阅读都不利

6.函数break,return时一定要注意资源的释放,比如释放申请的内存、释放锁

3

禁止内存操作越界:

1.使用memcpy/memset时一定要确保长度不要越界

2.字符串考虑最后的'\0',确保所有字符串是以'\0'结束

3.指针加减操作时,考虑指针类型长度

4.数组下标进行检查

5.使用时sizeof或者strlen计算结构/字符串长度,避免手工计算

6.数组的大小要考虑最大情况,避免数组分配空间不够

C语言入门到精通

4

禁止内存泄漏:

1.异常出口处检查内存、定时器/文件句柄/Socket/队列/信号量/GUI等资源是否全部释放

2.删除结构指针时,必须从底层向上层顺序删除

3.使用指针数组时,确保在释放数组时,数组中的每个元素指针是否已经提前被释放了

4.避免重复分配内存

5.小心使用有return、break语句的宏,确保前面资源已经释放

6.检查队列中每个成员是否释放

5

禁止引用已经释放的内存空间:

1.内存释放后,把指针置为NULL;使用内存指针前进行非空判断

2.耦合度较强的模块互相调用时,一定要仔细考虑其调用关系,防止已经删除的对象被再次使用

3.避免操作已发送消息的内存

4.自动存储对象的地址不应赋值给其他的在第一个对象已经停止存在后仍然保持的对象(具有更大作用域的对象或者静态对象或者从一个函数返回的对象)

END

本文分享自微信公众号 - C语言入门到精通(gh_780327809188),作者:闫小林

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基础知识 | 每日一面(61)

    小林:准确的的行为是由实现定义的,这就是应该有文档说明; 通常, 用 <> 括起来的头文件会先在一个或多个标准位置搜索。用 "" 括起来的头文件会首先在 “当前...

    闫小林
  • C语言 | 每日基础(50)

    阿一:这是个风格问题, 因此有不少的争论。很多人认为 “嵌套包含文件” 应该避免。它让相关定义更难找到,如果一个文件被包含了两次, 它会导致重复定义 错误; 同...

    闫小林
  • C语言 | 每日基础(41)

    读者:为什么在调用 free() 之后指针没有变空?使用 (赋值, 比较) 释放之 后的指针有多么不安全?

    闫小林
  • 常见的C语言编程规范

    9.只能通过包含头文件的方式使用其他.c提供的接口,禁止在.c中通过extern的方式使用外部函数接口、变量。

    用户4645519
  • python接口自动化34-json校验神器jsonschema

    前面一篇讲到json解析神器jsonpath, jsonpath是为了方便快速取值,如果我们要校验json的字段类型和格式,就不是那边方便了。 比如当接口返回一...

    上海-悠悠
  • iPhone6发布在即,需警惕钓鱼邮件

    近日,国外媒体发布报告,确认苹果将在9月9日发布iPhone6。监测发现,有网络不法分子打着iPhone6的幌子,采用垃圾邮件、网络钓鱼等手段试图骗取用...

    安恒信息
  • 投稿 | 逃离北上广后,程序员都去哪儿了?

    根据数据显示,自2007年起,程序员的就业城市选择已经开始从北上广深向新一线城市转移。从2016年第二季度的用工需求来看,二三线城市和新一线城市的同比增长情况均...

    数据猿
  • 程序员离开一线城市了吗?

    习惯上,北上广深被称为一线城市,是程序员就业的首选。一些直辖市、区域中心城市、东部经济发达地区的省会城市和沿海开放城市通常被认为是二线城市。根据《第一财经周刊》...

    华章科技
  • Python - 笔记1

    实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。

    py3study
  • Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群。现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运...

    Edison Zhou

扫码关注云+社区

领取腾讯云代金券