区分“函数声明”、“函数原型”和”函数定义“

1,273 阅读1分钟

刚刚阅读到函数这一章,读到"函数声明"、"函数原型"、"函数定义"这个三个名词的时候,一下子感觉特别的绕,特此记录区分一下。

函数声明

函数声明是指把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。

函数原型

函数原型是函数声明中的一个特例,若要作为原型,函数声明还必须为函数的参数确定类型和标识符。

而之所以有函数声明和函数原型的区别,是因为Old Style C语法的存在,并非所有的函数声明都包含完整的函数类型。

例如void threelines();这个声明并没有明确指出参数类型和个数,所以不算函数原型。这个声明提供给编译器的信息只有函数名和返回值类型。如果在这样的声明之后调用函数,编译器不知道参数的类型和个数,就不会做语法检查,所以很容易引入Bug。

函数定义

函数定义是指对函数功能的确立,包括指定函数名、函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。只有带函数体的声明才叫函数定义。

总结

总之区分方法就是:所有带函数体的函数声明是函数定义;明确指出函数类型、函数名、参数类型和参数个数的函数声明可以叫做函数原型。