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