📄 一句话概括
空函数 = 只干活、不交结果的函数,返回类型写 void。"空"指的是返回值的位置空着,不是函数体里什么活儿都不干。判断该不该用 void 只看一件事:这个结果我需不需要接回来——不需要,就用空函数。
📝 本节和前面几节的关系
6.2 讲了函数的两个口,这一节专讲"出口关掉"的那一类。void 你不是第一次见——2.1.4 拆 main 时前面站的是 int(它其实也要交一个退出码,2.1.6 讲过),而 1.3.2 的 Hello World 里那个"跑完就结束"的结构就是这个套路。另外,本节 Demo 里会出现"空函数调用别的函数",那是 6.3.2 嵌套调用的预告。
一、空函数的两种形态
void sayHello() { // 形态一:不收料、不出货
cout << "Hello" << endl;
}
void printStars(int n) { // 形态二:收料,但不出货
for (int i = 1; i <= n; i++) cout << "*";
cout << endl;
}
两种都是空函数:返回类型是 void,区别只在"收不收料"。它们的共同点——调用的效果不通过"返回值"体现,而是体现在屏幕上、文件里、或者它改动的数据上。
二、什么时候该用空函数(三种典型用途)
| 用途 | 例子 | 判断法 |
|---|---|---|
| 只输出 | 打印菜单、画分隔线、提示信息 | 干完就完了,没有"结果"要交出去 |
| 只操作 | 清屏、暂停、写文件、改全局状态 | 效果发生在函数外面(屏幕/文件/全局变量) |
| 占位与框架 | 先把 init() / process() / cleanup() 搭出来,细节以后填 |
结构先立起来,函数体可以先空着 |
反面清单(这些别用 void):
- 计算结果(求和、求平均、求最大值)→ 必须把结果交回来
- 判断结果(是不是素数、是否登录成功)→ 交回 bool
- 查找结果(找到了吗、在第几个)→ 交回下标或指针
三、动手 Demo:给程序配一套"装饰"函数
#include <iostream>
using namespace std;
void printLine() { // 只输出
cout << "====================" << endl;
}
void printMenu() { // 只输出,一条条列
printLine(); // 空函数里也能调别的函数
cout << " 1. 录入成绩" << endl;
cout << " 2. 查看成绩" << endl;
cout << " 0. 退出" << endl;
printLine();
}
void printStars(int n) { // 收料、不交结果
for (int i = 1; i <= n; i++) cout << "*";
cout << endl;
}
int main() {
printLine();
printMenu();
printStars(10);
return 0;
}
看到什么算成功:
====================
====================
1. 录入成绩
2. 查看成绩
0. 退出
====================
**********
为什么第一行是单独的一条分隔线:main 先喊了 printLine(),接着 printMenu() 内部自己也喊了一次,所以连着出现两行。
30 秒实验:把 int main() 改成 void main() 试试——Dev-C++ 可能放你过,但这是不合标准的写法(标准要求 main 必须返回 int)。这个实验的意义是记牢一句话:"能编过"不等于"合规矩"。改回来。
四、常见误区
- "void 函数里不能写 return"——
return;(不带值)合法,作用是"提前收工";只有return 值;不合法。 - "空函数的调用可以当值用"——不行。
cout << printLine();、int x = printLine();都编不过。把 void 调用当独立语句写。 - "空函数就是没用的函数"——反了。把"怎么打印菜单"收进函数,
main才读得出流程。 - "函数体空着才叫空函数"——两回事。
void f() { }是"返回值空 + 函数体也空";void f() { 一堆语句 }才是最常见的空函数(空的是返回值)。
自测三问(点开对答案)
1. 空函数的标志是什么?——返回类型写 `void`(不收结果)。 2. `void f() { return; }` 合法吗?——合法,表示提前结束;但 `return 5;` 不合法。 3. 什么时候不该用 void?——需要把结果交给调用方时(计算、判断、查找类函数)。- ☐ 6.2.2 形参与实参(下一节)
相关笔记
- 函数参数及返回值 —— 两个口的全景
- main 函数 ——
int main与void的对照 - 函数返回值 —— main 交回的退出码
- 🔷 C++基础 · 索引 —— 全课路线图