第6章 函数

1.编码风格

【规则6-1】每一个函数都必须有注释

【规则6-2】每个函数定义之后以及每个文件结束之后都要加若干个空行

【规则6-3】在一个函数体内,变量定义与函数语句之间要加空行

【规则6-4】逻辑上密切相关的语句之间不加空行

【规则6-5】复杂的函数中,在分支语句,循环语句结束之后需要适当的注释

【规则6-6】不要随意删除别人的代码

【规则6-7】用缩行显示程序结构,缩进量同意使用4个字符

【规则6-8】同层次的代码在同层次的缩进层

【规则6-9】代码行最大长度控制在80个字符以内

【规则6-10】长表达式要在低优先级操作符处划分新行,操作符放在新行之首(以便突出操作符)

if((very_longer_variable1 >= very_longer_variable2)         
           &&(very_longer_variable3 <= very_longer_variable4)
           &&(very_longer_variable5 <= very_longer_variable6))
           {
                 //code
            }

【规则6-11】用正确的反义词组命名具有互斥意义的变量或相反动作的函数

【规则6-12】用括号表达操作顺序

【规则6-13】不要编写太复杂的表达式

【规则6-14】不要编写多用途的表达式

【规则6-15】原则上尽量少使用全局变量,因为它的生命周期太长

【规则6-16】参数命名恰当,顺序合理

【规则6-17】如果参数是指针,且仅作输入参数作用,则应在类型前加const,防止指针在函数体内被修改

【规则6-18】不要省略函数的返回类型,如果函数没有返回值,则应声明为 void。如果缺省返回值类型,编译器默认为int

【规则6-19】函数入口处,对函数参数的有效性进行检查

【规则6-20】return语句不可返回指向“栈内存”的“指针

【规则6-21】相同的输入产生相同的输出。尽量避免函数带有记忆功能,少用static局部变量

【规则6-22】数组的大小应该显式声明

2.函数递归

 1 void fun(int i)
 2 {
 3     if (i>0)
 4     {
 5         fun(i/2);
 6     }
 7     printf("%d\n",i);
 8 }
 9 int main()
10 {
11     fun(10);
12     return 0;
13 }

上面的递归应该展开为如下的形式:

void fun(int i)
 {
      if (i>0)
      {
          fun(i/2);
          if (i/2>0)
           {
            fun(i/4);
                {
                }
                printf("%d\n",i/2);
            }
            printf("%d\n",i/4);
          
      }
      printf("%d\n",i);
  }