C语言——函数声明、定义、调用

目录

📝学前预警:

  • 前面我们有学习C语言的一些基础知识,大家如果想学习可以打开专栏链接查看C语言专栏🔗
  • 因为如果将所有的代码都放在main函数中会将可读性降低,并且代码会很冗长
  • 如果我们可以将main函数里面的部分代码分在其他函数中,再在main函数 / 其他函数中调用的话会让代码更加的清晰明了
  • 所以下面我们将学习函数的声明、定义、调用
    • 声明:是为了告诉编译器有这个函数
    • 定义:告诉编译器 "这个函数怎么做",函数的完整体现
    • 调用:使用这个函数

❗️前言

  • 在 C 语言中,函数 就是可重复使用的代码块
  • 有了函数,你就能让程序:
    • 结构更清晰
    • 代码更简洁
    • 更容易调试与维护

比如下面的代码;

  • 缺点:
    • 一堆重复代码;
    • 想改输出格式得改三次
    • 可读性 、维护麻烦
c 复制代码
#include <stdio.h>
int main() 
{
    int a = 3, b = 5;
    int c = a + b;
    printf("和是:%d\n", c);

    int x = 10, y = 20;
    int z = x + y;
    printf("和是:%d\n", z);

    int p = 7, q = 8;
    int r = p + q;
    printf("和是:%d\n", r);
    return 0;
}
  • 那么我们是不是可以将这个重复的代码写一次反复调用它就可以减少重复书写代码
  • 函数的声明,定义,调用就可以完美的解决这个问题

💥函数声明、定义、调用

下面的代码是上面代码的优化

  • 看上去下面的代码清晰明了
  • 想改加法逻辑(比如改成乘法)只需要改一处
  • 结构分明,逻辑层次更清楚
c 复制代码
#include<stdio.h>

//函数声明
int add(int x, int y);

//主函数
int main()
{
	int x, y;
	for (int i = 0; i < 3; i++)
	{
		scanf("%d %d", &x, &y);

		//函数调用
		int a = add(x, y);

		printf("%d+%d=%d\n", x,y,a);
	}
	return 0;
}

//函数定义
int add(int x, int y)
{
	return x + y;
}

函数声明、定义、调用有什么用处呢?

名称 用法 意义 作用
声明(Declaration) int add(int x, int y); 告诉编译器这个函数的存在、名字add、参数(int x, int y)和返回值int 让编译器在"定义之前"就能识别函数
定义(Definition) int add(int x, int y) { return x + y; } 告诉编译器函数怎么实现 真正实现功能的地方
调用(Call) add(x, y); 使用函数执行它的功能 让程序真正运行函数体里的代码

✅ 1. 声明:让编译器提前"知道"

  • 当你在 main() 调用一个函数时,编译器必须知道它的"样子"(参数、返回类型)。
    如果你在调用之前没定义,那就必须先声明,否则报错。

✅ 2. 定义:实现功能

  • 这是函数真正的"身体",代码逻辑都在这里写。

✅ 3. 调用:执行功能

  • 调用就是实际运行函数代码、得到结果。
    一个函数定义了但不调用,是不会执行的。
  • 声明:告诉编译器"有这个函数"
  • 定义:告诉编译器"这个函数怎么做"
  • 调用:告诉程序"去做这件事!"

1️⃣函数声明的位置

声明位置 是否可行 有效范围 常见用途
main 外 ✅ 推荐 整个文件 多个函数都能使用
main 内 ✅ 允许 只在 main 函数内部有效 临时使用或局部函数声明
  • 所以建议将函数声明放在main函数外面,最好是放在头文件下面。

2️⃣函数定义的位置对函数声明的影响

  • 先定义再调用(不需要声明)
c 复制代码
#include <stdio.h>
//函数定义(可以认为这样包含了函数声明)
int add(int a, int b) 
{
    return a + b;
}
//主函数
int main() 
{
	//函数调用
    printf("%d\n", add(3, 5));
    return 0;
}
  • 先声明,再定义
c 复制代码
#include <stdio.h>
// 函数声明
int add(int a, int b); 
//主函数
int main() 
{
	//函数调用
    printf("%d\n", add(3, 5));
    return 0;
}
// 函数定义
int add(int a, int b) 
{ 
    return a + b;
}

3️⃣函数分类:有无"参数"和"返回值"

类型编号 参数 返回值 举例 特点
无参数 无返回值 void hello(); 最简单,只执行某个操作
有参数 无返回值 void printSum(int a, int b); 输入数据但不返回,只输出
无参数 有返回值 int getRandom(); 不需要输入,但返回结果
有参数 有返回值 int add(int a, int b); 最常见的形式,输入输出都要

3.1、无参数、无返回值函数

  • 语法形式:void 函数名();

特点

  • 不接收任何输入;
  • 不返回结果;
c 复制代码
#include <stdio.h>
// 声明
void hello(); 
//主函数
int main() 
{
	// 调用
    hello(); 
    return 0;
}
// 定义
void hello() 
{
    printf("你好,C语言!\n");
}

3.2、有参数、无返回值函数

  • 语法形式:void 函数名(参数类型 参数名, ...);

特点

  • 有"输入"(参数),
  • 但没有返回值;
c 复制代码
#include <stdio.h>
// 声明
void printSum(int a, int b); 

int main() 
{
    printSum(3, 5); // 调用
    return 0;
}
// 定义
void printSum(int a, int b) 
{ 
    printf("和是:%d\n", a + b);
}

3.3、无参数、有返回值函数

  • 语法形式:返回值类型 函数名();

特点

  • 不需要传入任何参数;
  • 自己内部计算结果并返回;
c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 声明
int getRandom(void); 

int main() 
{
    srand((unsigned int)time(NULL));
    printf("随机数:%d\n", getRandom()); // 调用
    return 0;
}
// 定义
int getRandom() 
{ 
	int r=rand() % 100;
    return r; // 返回一个0-99的随机数
}

3.4、有参数、有返回值函数(最常用)

  • 语法形式:返回值类型 函数名(参数类型 参数名, ...);

特点

  • 有"输入"(参数)也有返回值;
  • 是最通用、最灵活的函数类型;
c 复制代码
#include <stdio.h>
// 声明
int add(int a, int b); 

int main() 
{
    int result = add(10, 20); // 调用
    printf("结果是:%d\n", result);
    return 0;
}
// 定义
int add(int a, int b) 
{ 
    return a + b;
}

✒️小结:

  • 上面我们学习了函数的声明、定义、调用
  • 使用这个可以提高代码的可读性,代码会更清晰明了

感谢大家的阅读!🌹🌹🌹

相关推荐
民乐团扒谱机7 小时前
实验室安全教育与管理平台学习记录(四)机械建筑类安全
学习·安全
报错小能手8 小时前
C++笔记(面向对象)多态(编译时 运行时)
c++·笔记
晨非辰8 小时前
《数据结构风云》递归算法:二叉树遍历的精髓实现
c语言·数据结构·c++·人工智能·算法·leetcode·面试
井队Tell9 小时前
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第十二天)
学习·3d·unity
青衫码上行9 小时前
【Java Web学习 | 第四篇】CSS(3) -背景
java·前端·学习
BreezeJuvenile9 小时前
外设模块学习(11)——火焰传感器、光敏电阻传感器(STM32)
stm32·单片机·学习·火焰传感器·光敏电阻传感器
_dindong11 小时前
牛客101:二叉树
数据结构·c++·笔记·学习·算法
人邮异步社区12 小时前
推荐几本学习计算机语言的书
java·c语言·c++·python·学习·golang
ha204289419415 小时前
Linux操作系统学习之---线程池
linux·c++·学习