1. 预先估算运算结果的可能取值范围,采用取值范围更大的类型定义变量,对于防止类型溢出是十分必要的;

  2. 通常变量名用小写字母开头的单词组合而成(“名词”或者“形容词 + 名词”),函数名则用大写字母开头的单词组合而成(“动词”或者“动词 + 名词”);

  3. 形式参数是内部变量,只能在函数体内访问;

  4. 若函数不需要入口参数,则需用 void 代替函数头部中形参表中的内容,它告诉编译器该函数不接收来自调用程序的任何数据;

  5. 主调函数把实参的值赋值给被调函数的形参的过程,称为参数传递

  6. 良好的程序设计风格要求即使函数没有返回值也要用 return

  7. 具有遇到不正确使用或非法数据输入时仍能保护自己避免出错的能力,即增强程序的健壮性,用于专门处理某些异常情况的技术,称为防御性程序设计

  8. printf() 是有返回值的,即其输出的字符个数;

  9. int 传值给 unsign int:实参值 -1 传给形参时,实际是将 -1 的二进制表示中的最高位(符号位)1 解释成了数据位,从而将有符号整数 -1 解释成了无符号 4 字节整数;

  10. 函数设计的一些基本原则:

    • 函数的规模要小,尽量控制在 50 行代码以内,更容易维护,出错几率更小
    • 函数的功能要单一
    • 尽量不要使用全局变量向函数传递信息
    • 在函数接口中清除地定义函数的行为,包括入口参数、出口参数、返回状态、异常处理等。定义好函数接口以后,轻易不要改动
    • 在函数的入口处,对参数的有效性进行检查
    • 考虑到如果调用失败,应该如何处理
  11. 递归调用函数必须包含如下两个部分:

    • 一般情况,使递归过程持续进行
    • 基线情况,用来结束递归调用的条件
  12. 递归将复杂的情形逐次归结为较简单的情形来计算,一直到归并为最简单的情形为止;

  13. 为了提高程序的执行效率,应尽量用迭代形式替代递归形式;

  14. 由于全局变量破坏了函数的封装性,因此建议尽量不要使用全局变量;

  15. const 将形参声明为常量,可以有效防止形参值在函数内被修改;

  16. 尽量让错误发生在程序编译时,而非程序运行时;

  17. 模块分解的基本原则是:高聚合、低耦合,保证每个模块的相对独立性;

  18. 自底向上,先编写出基础程序段,然后再扩大、补充和升级;

  19. 自顶向下, 先写出结构简单、清晰的主程序来表达整个问题,在此问题中包含的复杂子问题用子程序来实现;

  20. 逐步求精技术可以理解为时一种由不断的自底向上修正所补充的自顶向下的程序设计方法;

  21. 一些代码风格

    • 一行代码只定义一个变量

    • 在定义变量的同时初始化该变量

    • 相邻的两组逻辑上密切相关的语句块之间加空行

    • 如果代码行太长,则要考虑在适当位置进行拆分,拆分出的新行要进行适当的缩进;

    • 在重要文件的首部进行注释,如:

      /*程序功能  : XXXXX
        编程者    : XXXX
        日期      : 25/02/2020
        版本号    : 1.0        */
    • 在自定义函数的前面,对函数接口加以注释

    • 重要的语句行的右方注释

    • 重要的语句块的上方注释

Comments