C语言规范个人新认知

头文件

1.禁止头文件循环依赖

即不能出现多个.h文件形成 循环包含的情况。如:a.h包含b.h,b.h包含c.h. c.h包含a.h. 类似这种三者相互包含,这样就会导致修改其中一个.h文件,都会造成其他文件都需要重新 编译的情况

2.总是编写内部#include保护符(#defune 保护)

多次包含一个头文件的问题在人为上可以通过认真的设计来避免,如果我们水平未达到或无法避免,就需要采取阻止头文件内容被包含多于一次的机制。通常的手段是使用 #ifnden,#define,#endif. 去配置一个宏 来防止头文件被重复包含(具体操作不会找度娘)

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

即:禁止通过在a.c中直接写extern int foo(int input);来使用foo,这种写法容易在foo改变时可能导致声明和定义不一致。

函数

1.重复代码应该尽可能提炼成函数

重复代码提炼成函数可以带来维护成本的降低。

2.避免函数过长,新增函数不超过50行(有效代码段)

过长的函数往往意味着函数功能不单一,过于复杂。界普遍认为一个函数的代码行不要超 过一个屏幕,避免来回翻页影响阅读

3.可重入函数应避免使用共享变量;若需使用,则应通过互斥手段(关中断、信号量‘、互斥 锁)对其加以保护

可重入函数:可能被多个任务并发调用的函数

共享变量:全局变量和static变量

4.设置高扇入,合理扇出的函数

扇出:一个函数调用其它函数的数目

扇入:一个函数被调用的上级函数数目

扇出过大过小都不合理(最好3-5)。过大 表明函数过分复杂,需要过多调用下级函数。 过小 表明函数的调用层次可能过多,不利于结构分析。

扇入越大 表明此函数被调用的次数越多,这样的函数使用效率高,但不能一昧追求。

5.函数的不变参数使用const

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

标识符命名与定义

1.标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩 写,避免使人产生误解。

2 尽量避免名字中出现数字编号,除非逻辑上的确需要编号

3.全局变量应增加“g_” 前缀,静态变量应增加“s_”

使用全局变量十分危险,需要特殊标识,并提醒减少全局变量的使用

4.驼峰式命名法(目前主流)

该命名规范,要求第一个单词首字母小写,后面其他单词首字母大写,简单粗暴易学易 用。

5.对于数值或者字符串等等常量的定义,建议采用全大写字母,单词之间加下划线“_”的方式 命名(枚举同样建议使用此方式定义)

变量

1.要定义结构单一的结构体,不要设计面面俱到的数据结构

结构体的应该是相关的一组信息的集合,此结构体应该可以明确表达出一个对象。

2.防止局部变量与全局变量同名。

虽然 同名局部变量会屏蔽 全局变量。但还是不建议使用,其会使人误解

3.使用面向接口编程思想,通过API访问数据:如果本模块的数据需要对外部模块开放 ,应 提供接口函数来设置、获取,同时注意全局数据的访问互斥

宏,常量

1.使用宏时,不允许参数发生变化。

2.除非必要,应尽可能使用函数代替宏

表达式

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

即:不要将函数直接当 参数使用,需将其赋值

2.用括号明确表达式的操作顺序,避免过分依赖默认优先级

注释

1.注释的内容要清楚、明了,含义准确,防止注释二义性

2.注释是 对代码不明确的地方进行解释 而不是重复描述代码

3.函数声明处注释描述函数功能、性能及用法,包括输入和输出参数、函数返回值、可重入的要求等;定义处详细描述函数功能和实现要点,如实现的简要步骤、实现的理由、 设计约束等

排版与格式

1.多个短语句(包括赋值语句)不允许写在同一行内 ,即一行只写一条语句

2.在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格 ; 进行非对等操作时,如果是关系密切的立即操作符(如-> > ),后不应加空格

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值