【C】【笔记】《C语言深度剖析》第六章 函数

本文为个人读书笔记,仅供记录学习过程中遇到的日后需要留意的问题,如有相关版权问题请及时通知作者。

编码风格
1、每一个函数都必须有注释。
     头部说明需要包含的内容和次序

2、每个函数定义结束之后以及每个文件结束之后都要加一个或若干个空行
3、在一个函数体内,变量定义与函数语句之间要加空行
4、逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。
5、复杂的函数中,循环语句结束之后需要适当的注释,方便区分各分支或循环体
6、修改别人代码的时候不要轻易删除别人的代码,应该用适当的注释方式
7、用缩行显示程序结构,缩进量统一4个字符,不适用TAB缩进。
8、在函数体的开始、结构/联合的定义、枚举的定义以及循环、判断等语句中的代码都要采用缩行。
9、同层次的代码在同层次的缩进层上
10、最大长度控制在80个字符以内,较长的语句、表达式要分多行书写
11、长表达式要在低优先级操作符处划分新行,操作符放在新行之首。拆分出来的新行要进行适当的缩进,使排整齐。
12、如果函数中的参数较长,要进行适当的划分。
13、用正确的反义词组命名具有互斥意义的变量或相反动作的函数
14、如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。
15、不要编写太复杂的符合表达式
16、不要有多用途的符合表达式
17、尽量避免含有否定运算符的条件表达式
18、参数的书写要完整,不要省略参数名。如果函数没有参数,则用void填充。

函数设计的一般原则和技巧
19、少用全局变量。各个源文件负责本身文件的全局变量,同时提供一对对外函数,方便其他函数使用该函数来访问变量。不要直接读写全局变量,尤其是在多线程编程时,必须使用set/get的方式,并且对读写操作加锁。

20、参数命名要恰当、顺序要合理。一般应将目的参数放在前面,源参数放在后面

21、如果参数是指针,且仅作输入参数用,则应在类型前加const,方式该指针在函数体内被意外修改。

22、不要省略返回值的类型,如果函数没有返回值,那么应声明为void类型。如果没有返回值,编译器则默认函数的返回值是int类型的。

23、在函数体的入口处,对参数的有效性进行检查,尤其是指针参数,尽量使用assert宏作入口校验,而不使用if语句校验。

24、return语句不可返回指向栈内存的指针,因为该内存在函数体结束时被自动销毁。

25、函数的功能要单一,不要涉及多用途的函数。

26、函数体的规模要效,尽量控制在80行以内。

27、相同的输入应当产生相同的输出。尽量避免函数带有记忆功能。带有记忆功能的函数其行为是不可预测的,因为他的行为可能取决于某种记忆状态。这样的函数不利于测试和维护。在C语言中,函数的static局部变量是函数的记忆存储器。尽量少使用static,除非必须。

28、避免函数有太多的参数,尽量控制在4个以内。

29、尽量不要使用类型和数目不确定的参数。
     C标准库函数printf是采用不确定参数的典型代表,函数原型:
          int printf(const chat *format[,argument]……);
     这种风格的函数在编译时丧失了严格的类型安全检查。

30、有时候函数不需要返回值,单位了增加灵活性如支持链式表达,可以附加返回值。

31、不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内的变量的有效性,如全局变量、文件句柄等。

32、函数名与返回值类型在语义上不可冲突
     违反的典型代表是 getchar。其返回值是int型,函数原型:
     int getchar(void);
     如:
char c
c = getchar();
if(EOF == c)
{
}
     char型的取值范围是[-128,127],如果宏EOF的值在char的取值范围之外,EOF的值将无法全部保存到c内,会发生截断,将EOF值的低8位保存到c里。这样if语句有可能总是失败。

递归调用
     尽量不要用递归。要用的时候注意递归层次不要太深,防止栈溢出;递归的停止条件一定要正确,否则,递归可能没完没了。















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值