详解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