C语言编程总结--程序员必须知道的77条编程细节

转载请注明出处:http://blog.csdn.net/ecorefeng

 

在编程过程中会遇到各种各样的错误与警告,这里我对编程过程中经常遇到的细节或者说常出错的地方进行了简单的总结,希望对正在编程的“童鞋”有所帮助:

 

C语言编程提示的总结:

1:使用 #include 指令避免重复声明

2:使用 #define 指令给常量值取名

3:在 #include 文件中放置函数原型

4:在使用下标前先检查它们的值

5:在 while if 表达式中蕴含赋值操作

6:如何编写一个空循环体

7:始终要进行检查,确保数组不越界

8:良好的程序风格和文档将使程序容易阅读和维护

9:为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要在字符上执行算术运算

10:用它们在使用时最自然的形式来表示字面值

11:不要把整型值和枚举值混在一起使用

12:不要依赖隐式声明

13:在定义类型的新名字时,使用 typedef 而不是 #define

14:用 const 声明其值不会修改的变量

15:使用名字常量而不是字面值常量

16:不要在嵌套的代码块之间使用相同的变量名

17:在一个没有循环体的循环中,用一个分号表示空语句,并让它独占一行

18 for 循环的可读行比 while 循环强,因为它把用于控制循环的表达式收集起来放在一个地方

19:在每个 switch 语句中都使用 default 子句

20:使用符号赋值符可以使用程序更容易维护

21:使用条件操作符代替 if 语句以简化表达式

22:使用逗号操作符来消除多余的代码

23:不要混用整型和布尔型值

24:一个值应该只具一种意思

25:如果指针并不指向任何有意义的东西,使它非法地指向了数组第 1 个元素的前面的内存位置

26:在函数原型中使用参数名,可以给使用该函数的用户提供更多的信息

27:抽象数据类型可以减少程序对模块实现细节的依赖,从而提高程序的可靠性

28:当递归定义清晰地优点可以补偿它的效率开销时,就可以使用这个工具

29:一开始就编写良好的代码显然比依赖编译器来修正劣质代码更好

30:源代码的可读性机会总是比程序的运行时效率更为重要

31:只要有可能,函数的指针参都应该声明为 const

32:在有些环境中,使用 register 关键字提高程序的运行时效率

33:在多维数组的初始值列表中使用完整的多层花括号能提高可读性

34:不要试图自己编写功能相同的函数来取代库函数

35:使用字符分类和转换函数可以提高函数的移植性

36:把结构标签声明和结构的 typedef 声明放在头文件中,当源文件需要这些声明时可以通过 #include 指令把它们包含进来

37::结构成员的最佳排列形式并不一定就是考虑边界对齐而浪费空间最少的那种排列形式

38:把位段成员显示地声明为 signed in unsigned 类型

39:位段是不可移植的

40:位段时源代码中位的操作表达得更为清楚

41:动态内存分配有助于消除程序内部存在的限制

42:使用 sizeof 计算数据类型的长度,提高程序的可移植性

43:消除特殊情况使代码更容易维护

44:通过锻炼语句消除 if 语句中的重复语句

45:不要仅仅根据代码的大小评估它的质量

46:如果并非必要,避免使用多层间接访问

47 cdecl 程序可以帮助你分析复杂的声明

48:把 void* 强制转换为其他类型的指针时必须小心

49:使用转移表时,应始终验证下标的有效性

50:破坏性的命令行参数处理方式使你以后无法再进行处理

51:不寻常的代码始终应该加上一条注释,描述它的目的和原理

52:避免用 #define 指令定义可以用函数实现的很长序列的代码

53:在那些对表达式求值的宏中,每个宏参数出现的地方都应该加上括号,并且在整个宏定义的两边也加上括号

54:避免使用 #define 宏创建一种新语言

55:采用命名约定,使程序员很容易看出某个标识符是否为 #define

56:只要合适就应该使用文件包含,不比担心它的额外开销

57:头文件只应该包含一组函数和(或)数据的声明

58:把不同集合的声明分离到不同的头文件中可以改善信息隐藏

59:嵌套的 #include 文件使我们很难判断源文件之间的依赖关系

60:在可能出现错误的场合,检查并报告错误

61:操纵文本行而无需顾及它们的外部标识形式,这个能力有助于提高程序的可移植性

62:使用 scanf 限定提高可移植性

63:当你打印长整数时,即使你所使用的机器并不需要,坚持使用 1 修改符可以提高可移植性

64:滥用 setjmp longjmp 可能导致晦涩难懂的代码

65:对信号进行处理将导致程序的可移植性变差

66:使用断言可以简化程序的调试

67:避免使用具有副作用的函数可以使程序更容易理解

68:一个模块的接口应该避免暴漏它的细节

69:将数据类型参数化,是它更容易修改

70:只有模块对外公布的接口才应该是公用的

71:使用断言来防止非法操作

72:几个不同的实现使用同一个通用接口是模块具有更强的可互换性

73:复用现存的代码而不是对它进行改写

74:迭代比尾部递归效率更高

75使用 stdarg 实现可变参数列表

76:改进算法比优化代码更有效率

77:使用某种环境特有的技巧会导致程序不可移植

 

 

--end--

 

 

转载请注明出处:http://blog.csdn.net/ecorefeng

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值