全部学习汇总: https://github.com/GreyZhang/misra_c_hacking
16.1, 函数的参数数目不能是可变的,这个我在工作中其实是遇到很多可变的设计,自然,遇到的基本都是不符合规范的了。
16.2, 函数不能够直接或者间接调用自己。这一条的主要目的是为了避免出现递归,最终导致堆栈空间使用问题。当然,针对递归的使用这里是一刀切了,直接不能用,即使是存储不会增长的尾递归也不允许使用。
16.3, 函数的参数必须要有名字。关于这一条,说起来还是很有意思的。我曾经为了让别人不容易看懂我的代码而故意不这么做,那时候我还是一个少年。
16.4, 函数定义以及声明的标识符必须对等。
16.5, 没有参数的函数在定义或者声明的时候参数中必须写一个void。我遇到很多有人省略void,其实省略掉之后意味着函数的参数可以是任意多个,这也与前面的可变数目的规则有一定的不符。
16.6, 传递给函数的参数数目必须与定义或者声明时候的数目相同。
16.7, 这个规则主要是用于C语言的,但是我在读C++的教程《think c++》的时候接触到了一个概念。函数的分类有三种:纯函数、修改器、模板(fill-in)。这里提到的功能描述其实是对于纯函数要求的。来到C,如果纯函数中的参数是指针类型,那么应该加一个const防止错误修改。
16.8, 带有非空返回值的函数退出路径必须是一个明确的return。
16.9, 函数标识符在使用的时候,要么用&来取地址,要么执行一次完整的函数调用。
16.10, 如果函数有错误码返回,那么应该看一下是否有错误报出。
这几条关于函数设计的规则都比较简单也比较容易理解,不过看了一遍之后我发现我接触过的项目开发中能够做到这样要求的似乎还没有遇到。个人的成长以及公司的进步看起来都是长路漫漫啊,继续上下求索吧!