- 定义
- 函数定义是指对函数功能的确切实现,包括函数体(即函数具体要执行的代码块)。它详细地说明了函数是如何完成其任务的。
- 函数定义的一般形式为:
- 返回值类型 函数名(参数列表) {
函数体(变量定义、语句等)
}
- 返回值类型 函数名(参数列表) {
- 例如,定义一个简单的函数来计算两个整数的和:
int add(int a, int b) { return a + b; }
- 这里
int add(int a, int b)
是函数头,{ return a + b; }
是函数体。函数头指定了函数的返回值类型(int
,表示返回一个整数)、函数名(add
)和参数列表(int a, int b
,表示这个函数接受两个整数类型的参数)。函数体中的return a + b;
语句则实现了计算两个整数相加并返回结果的功能。
- 声明
- 函数声明主要是把函数的名称、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
- 函数声明的一般形式为:
- 返回值类型 函数名(参数列表);
- 例如,对于上面的
add
函数,可以进行如下声明:int add(int, int);
- 也可以写成:
int add(int a, int b);
- 这里参数名可以省略(如第一种写法),但参数类型不能省略。
- 区别
- 功能重点不同
- 函数定义侧重于函数功能的实现,它包含了具体的代码逻辑,用于完成特定的任务。例如,上面
add
函数的定义详细说明了如何计算两个整数的和并返回结果。 - 函数声明侧重于告诉编译器函数的基本信息,如函数名、返回值类型和参数的类型等,以便编译器在编译调用该函数的代码时能够进行类型检查等操作,它本身不包含函数的具体执行代码。
- 函数定义侧重于函数功能的实现,它包含了具体的代码逻辑,用于完成特定的任务。例如,上面
- 出现位置灵活性不同
- 函数定义通常在程序的某个具体位置,一般在源文件中。对于一个较大的C程序,函数定义可能在多个
.c
文件中,而且通常一个函数定义只能在一个地方出现(不能重复定义)。 - 函数声明可以在调用函数的源文件开头,也可以在头文件(
.h
文件)中。而且函数声明可以在多个地方出现,方便不同的源文件使用该函数声明来正确调用函数。
- 函数定义通常在程序的某个具体位置,一般在源文件中。对于一个较大的C程序,函数定义可能在多个
- 是否生成可执行代码不同
- 函数定义会生成可执行代码,因为它包含了函数具体的操作逻辑。当程序运行到调用该函数的地方时,会执行函数定义中的代码。
- 函数声明不会生成可执行代码,它只是为编译器提供信息,帮助编译器正确处理函数调用。
- 对编译器的作用不同
- 函数定义提供了函数的实际实现,编译器会根据函数定义来分配内存空间,用于存储函数中的变量和代码等。
- 函数声明主要用于编译阶段的类型检查。例如,如果函数声明为返回
int
类型,但是在调用函数后接收返回值的变量是其他类型(如float
),编译器就会发出警告或者错误信息。
- 功能重点不同