详解C语言中的 break

2018-12-31

定义

break 语句将终止执行其所在位置最接近的外围 do、for、switch 或 while 语句。 控制权将传递给已终止语句后面的语句。

语法

break;

说明

在此语句之后,控件将在封闭循环或开关之后立即转移到语句或声明。

break语句不能用于打破多个嵌套循环。

例子

switch...case

#include <stdio.h>

int main(void)
{
	int i = 2;
	switch (i)
	{
	case 1:
		printf("1");
	case 2:
		printf("2"); // i==2, 所以从此行开始执行
	case 3:
		printf("3");
	case 4:
	case 5:
		printf("45");
		break; // 从此行跳出switch
	case 6:
		printf("6");
	}
	printf("\n");
	return 0;
}

执行结果:2345

循环(以for为例)

#include <stdio.h>

int main(void)
{
	int i, j;
	for (i = 0; i < 3; ++i)
	{
		for (j = 0; j < 4; ++j)
			break;				  // break 只能终止离它最近的循环
		printf("Hello World!\n"); //输出三次
	}
	return 0;
}

执行结果:

Hello World!
Hello World!
Hello World!

if语句

#include <stdio.h>

int main()
{
	int i;

	for (i = 0; i < 3; ++i)
	{
		if (3 > 2)
		{
			break;
		}
		printf("Hello,World!\n");
	}
	return 0;
}

执行结果:无输出

根据定义可知,break只会打破do、for、switch 或 while 语句,不会打破if语句,所以这个例子中的break打破的是外层的for循环。

再看一个例子:

#include <stdio.h>

int main()
{
		if (3 > 2)
		{
			break;
			printf("Hello,World!\n");
		}
	return 0;
}

编译报错:error C2043: illegal break

gcc编译器下给我们提供了更多信息:

test.c: In function 'main':
test.c:7:4: error: break statement not within loop or switch
    break;
    ^~~~~

即“不在循环或switch的break语句”,由此可知,break不能单独的存在于if语句中,这是一个很不符合我们的思考方式的一个误区。

参考资料

break 语句 (C) | Microsoft Docs

C / break statement — DevDocs

break statement - cppreference.com