C语言函数的定义与函数的声明的区别

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
  1. 定义
    • 函数定义是指对函数功能的确切实现,包括函数体(即函数具体要执行的代码块)。它详细地说明了函数是如何完成其任务的。
    • 函数定义的一般形式为:
      • 返回值类型 函数名(参数列表) {
        函数体(变量定义、语句等)
        }
    • 例如,定义一个简单的函数来计算两个整数的和:
      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;语句则实现了计算两个整数相加并返回结果的功能。
  2. 声明
    • 函数声明主要是把函数的名称、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
    • 函数声明的一般形式为:
      • 返回值类型 函数名(参数列表);
    • 例如,对于上面的add函数,可以进行如下声明:
      int add(int, int);
      
    • 也可以写成:
      int add(int a, int b);
      
    • 这里参数名可以省略(如第一种写法),但参数类型不能省略。
  3. 区别
    • 功能重点不同
      • 函数定义侧重于函数功能的实现,它包含了具体的代码逻辑,用于完成特定的任务。例如,上面add函数的定义详细说明了如何计算两个整数的和并返回结果。
      • 函数声明侧重于告诉编译器函数的基本信息,如函数名、返回值类型和参数的类型等,以便编译器在编译调用该函数的代码时能够进行类型检查等操作,它本身不包含函数的具体执行代码。
    • 出现位置灵活性不同
      • 函数定义通常在程序的某个具体位置,一般在源文件中。对于一个较大的C程序,函数定义可能在多个.c文件中,而且通常一个函数定义只能在一个地方出现(不能重复定义)。
      • 函数声明可以在调用函数的源文件开头,也可以在头文件(.h文件)中。而且函数声明可以在多个地方出现,方便不同的源文件使用该函数声明来正确调用函数。
    • 是否生成可执行代码不同
      • 函数定义会生成可执行代码,因为它包含了函数具体的操作逻辑。当程序运行到调用该函数的地方时,会执行函数定义中的代码。
      • 函数声明不会生成可执行代码,它只是为编译器提供信息,帮助编译器正确处理函数调用。
    • 对编译器的作用不同
      • 函数定义提供了函数的实际实现,编译器会根据函数定义来分配内存空间,用于存储函数中的变量和代码等。
      • 函数声明主要用于编译阶段的类型检查。例如,如果函数声明为返回int类型,但是在调用函数后接收返回值的变量是其他类型(如float),编译器就会发出警告或者错误信息。
相关文章
|
8天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
21 3
|
1天前
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
17 10
|
3天前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
6天前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
8天前
|
C语言
C语言函数
C语言函数
10 0
|
9天前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
32 0
|
9天前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
25 2
|
11天前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
15 3
|
14天前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数