C语言规则

语言规则—基础

  1. 编写清晰表达设计思路和意图的代码
  2. 针对易读来优化代码,效率的优化留给编译器去做
  3. 编写可大声朗读的代码
  4. 利用注释阐述和解释代码,并进行总结
  5. 使用有意义且无歧义的命名方法(推荐使用全英文的命名)
  6. 尽可能使用标准C函数
  7. 不要将同样的代码使用三次以上,编写成相应的函数
  8. 让程序自己检查运行中的错误,编写调试代码
  9. 谨慎使用GOTO语句
  10. 不要修补那些风格差的代码,重写它们
  11. 不要比较两个浮点数是否相等
  12. 优化代码或调试一旧版本前,备份并记录所做的修改
  13. 避免机器及编译器相关的代码,如必需,隔离相关代码
  14. 将编译器设为最高警告水平,把每一个警告视为错误来处理
  15. 不要直接在程序中直接书写常量,应该使用常量的宏定义

语言规则—避免使用

  1. #include 的头文件没有被引用
  2. 在同一个编译单元内(一般是 .C 文件)重复引用同一头文件
  3. 在同一个编译单元内(一般是 .C 文件)重复引用同一头文件
  4. 全局量仅仅在一个C文件中引用(应该使用static量)
  5. 在赋值中,左右两边的数据类型不一样(如确实必须,应该显式地进行类型转换)
  6. 函数返回指向函数内说明的自动变量的指针(应该使用指向static变量的指针)
  7. 删除switch case语句中的break语句(除非两个或多个case的处理代码是完全一致的,这时应该加以注释)
  8. 两个不同 指针间的运算
  9. 隐含的数据类型转换
  10. 隐含的对于变量是否为0的测试(比如:if(a=b),正确的写法是if((a=b)!=0)
  11. 缺少default的switch语句
  12. 表达式中假设了运算顺序(不要怕写括号)
  13. 忽略函数的返回值,如果函数不需要返回值可使用(void)f() ;但如果程序中无返回值函数的数量太对,则的设计可能会有问题

语言规则—依赖关系

  1. 模块间的依赖关系对于开发效率,可测性,可维护性都有
    很大的影响. 良好的依赖关系应该是简单的,层次化的,
    和非循环的
  2. 函数间传递的参数越少越好,减少模块件的依赖关系和
    耦合程度,最大程度上实现对模块的封装,将模块内的复
    杂性屏蔽,而对外提供简洁的数据接口。
  3. 尽量减少全局量的使用,局限在一个c文件中的全局量
    应该说明为static。
  4. 对于一组在逻辑上相关的变量,应该尽量将他们封装在
    结构中。

语言规则—类型

  1. 推荐使用typedef 来进行数据类型的说明。
  2. 所有不同类型变量间的运算,必须显式地进行类
    型转换。(这一点对于不同类型的指针间运算尤
    其重要)
  3. 对于没有加unsigned 修饰的类型, 应该小心处理
    可能的数据溢出

语言规则—变量

  1. 在程序( 函数或c文件)的开始处对变量进行说明, 将相关
    的变量说明放在相邻的行
  2. 变量的说明应该遵循一个变量一行的原则, 除非所说明的
    变量是紧密相关的
  3. 将不变的变量说明为const
  4. 尽量在变量的说明行中对变量进行初始化
  5. 避免不必要的全局变量

语言规则—指针

  1. 什么时候使用指针?
    该变量在其有效期内可能表示不同的对象.
    该变量表示一个任意的关系, 也即其可能为空.
    使用指针可能有更高的效率(关键代码中)或更好的实现
  2. 避免无效的指针
  3. 假设任何指针都可能为空
  4. 使用NULL来比较指针, 而不是0.仅有指针才会拥有
    NULL值、、
  5. 使用NULL 来表示指针不指向任何对象;使用0x0 表示数
    值零; 使用’\0’表示字符串的结束.

语言规则—表达式

  1. 只有在没有更好的变通情况下使用GOTO
    语句
  2. 确保数组的存取没有越界
  3. 假设所有的临时变量再使用完毕后就被立
    刻清除

语言规则—函数

  1. 所有函数的入口参数都必须进行合法性检查
  2. 函数间的接口越简洁越好, 参数传递应该尽可能的简单
  3. 理想的函数应该仅有一个统一的返回点(出口)
  4. 对于某个具体的项目而言, 函数应该拥有尽量统一的返
    回值约定
  5. 函数的调用者应该检查函数的返回值
  6. 过深层次的嵌套调用应该充分考虑系统或该进程的堆
    栈大小, 防止堆栈溢出
  7. 每个函数前必须有相应的说明
  8. 所有函数的返回类型必须显式的定义, 没有返回值的
    函数应该说明为void
/*********************************************************
*FUNCTION NAME : test_func
*
*ARGUMENT:
*in_arg1: brief description of the argument
*in_arg2: brief description of the argument
*in_arg3: brief description of the argument
**
FUNCTION(S) CALLED
*function1
*function2
**
GLOBAL VAR REFERENCED: g_var1, g_var2
*GLOBAL VAR MODIFIED: g_var2
**
DESCRIPTION: A detailed description of the function should be list here
**
NOTE: The information should be noted list here
*
*************************************************************
*MODIFICATION HISTORY
mm.dd.yy Lingming Description of the changes made to this func
Changes should be list in reverse order
*************************************************************/

语言规则—内存及资源

  1. 程序申请内存或资源时, 必须检查返回值是
    否有效
  2. 所申请的资源或内存在使用完毕后, 必须显
    式地及时地进行释放
  3. 函数内部的局部量中, 不应该使用大的数组.
    (此时应该使用static 说明)

语言规则—源文件

引用头文件的顺序

  1. 系统头文件
  2. 厂商头文件
  3. 结构头文件
  4. 应用程序头文件

头文件多重引用检查

#ifndef _SAMPLE_H
#define _SAMPLE_H
…
(include file contents)
…
#endif /*_SAMPLE_H*/
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值