[编程规范] 函数

  • 对所调用函数的错误返回码需要仔细、全面的处理;

  • 明确函数功能,精确地实现函数设计;

  • 编写可重入函数时,应注意局部变量的使用,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性;

  • 编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段加以保护,若对所使用的全局变量不加以保护,则此函数不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态;

  • 在同一项目组应明确规定对接口函数参数的合法性检查应由函数的调用者负责还是由接口函数本身负责,缺省是由函数调用者负责,注意函数参数检查的必要性,这对于减少代码错误很有帮助

  • 防止将函数的参数作为工作变量,最好先用局部变量代之,最后再将局部变量的内容赋值给该参数;

  • 一个函数仅完成一件功能

  • 为简单功能编写函数,虽然为仅用一两行就可完成的功能去编写函数好像没必要,但用函数可使功能明确化,增加程序可读性,举个例子:

    value = (a > b) ? a : b; //该语句的功能不很明显

    修改如下:

    int max(int a, int b) {
        return ((a > b) ? a : b);
    }
    value = max(a, b);
  • 不要设计多用途面面俱到的函数;

  • 函数的功能应该是可以预测的,也就是说只要输入数据相同就应产生同样的输出;

  • 避免设计多参数函数,不使用的参数从接口中去掉,目的是减少函数间接口的复杂度;

  • 检查函数所有参数输入的有效性;

  • 检查函数所有非参数输入的有效性,如数据文件、公共变量等,函数在使用输入之前,应进行必要的检查;

  • 函数名应准确描述函数的功能;

  • 使用动宾词组为执行某操作的函数命名,如果是OOP方法,可以只有动词,名词是对象本身;

  • 避免使用无意义或含义不清的动词为函数命名,如process、handle等为函数命名,因为这些动词并没有说明要具体做什么;

  • 函数的返回值要清楚、明了,函数的每种出粗返回值的意义要清晰、明了、准确,防止使用者误用、理解错误;

  • 防止把没有关联的语句放在一个函数中,防止函数或过程内出现随机内聚,随机内聚是指没有关联或关联很弱的语句放到同一个函数或过程中,随机内聚给函数或过程的维护、测试及以后的升级等造成了不便,同时也使函数或过程的功能不明确。在编程时,经常遇到在不同函数中使用相同的代码,许多开发人员都愿意把这些代码提取出来,并构成一个新的函数,若这些代码关联较大并且是完成一个功能的,那么这种构造是合理的,否则这种构造将产生随机内聚的函数,例如:

    void Init_Var(void) {
        Rect.length = 0;
        Rect.width = 0;
        Point.x = 10;
        Point.y = 10;
    }

    矩形的长、宽与点的坐标基本没有任何关系,所以以上函数是随机内聚,应分成两个函数:

    void Init_Rect(void) {
        Rect.length = 0;
        Rect.width = 0;
    }
    
    void Init_Point(void) {
        Point.x = 10;
        Point.y = 10;
    }
  • 如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题,可考虑把这段代码构造成一个新的函数;

  • 功能不明确较小的函数,特别是仅有一个上级函数调用它时,应考虑把它合并到上级函数中,而不必单独存在;

  • 设计高扇入、合理扇出的函数,扇出是指一个函数直接调用其他函数的数目,而扇入函数是指有多少上级函数调用它,扇出过大,表明函数过于复杂,需要控制和协调过多的下级函数,而扇出过小,如总是1,表明系统的调用层次可能过多,这样不利于程序阅读和函数结构的分析,函数较合理的扇出通常是3~5;

  • 减少函数本身或函数间的递归调用;

  • 改进模块中函数的结构,降低函数间的耦合度,并提高函数的独立性和代码可读性、效率和可维护性,应尽量提高函数的内聚性,单一功能的函数内聚性最高;

  • 避免使用BOOL参数,其一是BOOL参数无意义,调用时很难知道该参数到底传达的是什么意思,其二是BOOL参数值不利于扩充;

  • 当一个过程(函数)中对较长变量(一般是结构的成员)有较多引用时,可以用一个意义相当的宏代替;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值