刚刚阅读到函数这一章,读到"函数声明"、"函数原型"、"函数定义"这个三个名词的时候,一下子感觉特别的绕,特此记录区分一下。
函数声明
函数声明是指把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
函数原型
函数原型是函数声明中的一个特例,若要作为原型,函数声明还必须为函数的参数确定类型和标识符。
而之所以有函数声明和函数原型的区别,是因为Old Style C语法的存在,并非所有的函数声明都包含完整的函数类型。
例如void threelines();这个声明并没有明确指出参数类型和个数,所以不算函数原型。这个声明提供给编译器的信息只有函数名和返回值类型。如果在这样的声明之后调用函数,编译器不知道参数的类型和个数,就不会做语法检查,所以很容易引入Bug。
函数定义
函数定义是指对函数功能的确立,包括指定函数名、函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。只有带函数体的声明才叫函数定义。
总结
总之区分方法就是:所有带函数体的函数声明是函数定义;明确指出函数类型、函数名、参数类型和参数个数的函数声明可以叫做函数原型。