在 C 语言中,break 语句主要有两个作用,具体它跳出的是什么,取决于它所处的上下文:

(图片来源网络,侵删)
- 跳出
switch语句 - 跳出
for、while或do-while循环
下面我们详细解释这两种情况。
跳出 switch 语句
这是 break 最经典和最常见的用途,在 switch 语句中,case 标签只是一个入口点,一旦程序执行到一个匹配的 case,它会顺序执行该 case 以及之后的所有 case 的代码,直到遇到 break 语句或 switch 语句的结束大括号 。
如果没有 break,就会发生 “case 穿透” (case fall-through) 的情况。
示例:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break; // 跳出 switch 语句
case 2:
printf("星期二\n");
break; // 跳出 switch 语句
case 3:
printf("星期三\n");
break; // 跳出 switch 语句
case 4:
printf("星期四\n");
break; // 跳出 switch 语句
case 5:
printf("星期五\n");
break; // 跳出 switch 语句
case 6:
printf("星期六\n");
break; // 跳出 switch 语句
case 7:
printf("星期日\n");
break; // 跳出 switch 语句
default:
printf("无效的日期\n");
break; // 虽然是最后一句,但加上是好习惯
}
return 0;
}
在这个例子中,当 day 的值为 3 时,程序会执行 case 3: 的代码,打印 "星期三",然后遇到 break;,break 会立即终止整个 switch 语句的执行,程序会跳转到 switch 语句后面的代码,也就是 return 0;。
跳出 for、while 或 do-while 循环
break 也可以用于循环中,它的作用是立即终止 当前所在的循环,程序流程会跳转到循环语句后面的第一条语句继续执行。
示例:
#include <stdio.h>
int main() {
int i;
// 使用 for 循环
printf("for 循环示例:\n");
for (i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当 i 等于 5 时,跳出 for 循环
}
printf("%d ", i);
}
// 循环在这里终止,不会打印 5, 6, 7, 8, 9, 10
printf("\n循环已跳出,i 的值是: %d\n\n", i); // 输出 i 的值
// 使用 while 循环
printf("while 循环示例:\n");
int j = 1;
while (j <= 10) {
if (j == 7) {
break; // 当 j 等于 7 时,跳出 while 循环
}
printf("%d ", j);
j++;
}
// 循环在这里终止,不会打印 7, 8, 9, 10
printf("\n循环已跳出,j 的值是: %d\n", j);
return 0;
}
输出结果:

(图片来源网络,侵删)
for 循环示例:
1 2 3 4
循环已跳出,i 的值是: 5
while 循环示例:
1 2 3 4 5 6
循环已跳出,j 的值是: 7
注意: break 只能跳出它所在的 一层 循环,如果你在嵌套循环中使用 break,它只会跳出最内层的那个循环。
嵌套循环示例:
#include <stdio.h>
int main() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 这个 break 只会跳出内层的 for (j) 循环
}
printf("i=%d, j=%d\n", i, j);
}
}
return 0;
}
输出结果:
i=1, j=1
i=2, j=1
i=3, j=1
可以看到,当 j 等于 2 时,break 跳出了内层循环,但外层循环 i 继续正常执行。
break 与 return 的区别
初学者容易混淆 break 和 return。
break: 只能跳出 循环 或switch语句,它不会结束整个函数的执行。return: 用于从 函数中返回,并立即结束 整个函数 的执行。
示例对比:
#include <stdio.h>
void function_with_break() {
printf("function_with_break 开始\n");
for (int i = 0; i < 5; i++) {
if (i == 2) {
break; // 只跳出 for 循环
}
printf("i = %d\n", i);
}
printf("function_with_break 结束 (因为循环结束了)\n"); // 这行代码会被执行
}
void function_with_return() {
printf("function_with_return 开始\n");
for (int i = 0; i < 5; i++) {
if (i == 2) {
return; // 直接结束整个 function_with_return 函数
}
printf("i = %d\n", i);
}
printf("function_with_return 结束 (这行代码永远不会被执行)\n");
}
int main() {
function_with_break();
printf("-----------------\n");
function_with_return();
printf("main 函数继续执行\n"); // 这行代码会被执行
return 0;
}
输出结果:
function_with_break 开始
i = 0
i = 1
function_with_break 结束 (因为循环结束了)
-----------------
function_with_return 开始
i = 0
i = 1
main 函数继续执行
| 上下文 | break 的作用 |
|---|---|
switch 语句 |
立即终止 switch 语句的执行,跳转到 switch 后的代码。 |
for/while/do-while 循环 |
立即终止 当前 循环的执行,跳转到循环后的代码。 |
| 嵌套循环 | 只跳出 最内层 的那个循环。 |
| 函数 | break 不能 跳出函数,return 才可以。 |
