> For the complete documentation index, see [llms.txt](https://labspc.gitbook.io/cnippets/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://labspc.gitbook.io/cnippets/chap3.-kong-zhi-liu/3.8-goto-yu-ju-yu-biao-hao.md).

# 3.8 goto 语句与标号

建议少用，但不是不能用。

<figure><img src="https://labspc.com/wp-content/uploads/2024/01/1705732721-word-image-312-1.png" alt=""><figcaption></figcaption></figure>

`goto` 语句是一种在程序中实现**无条件跳转**的控制流语句。在 C 语言中，你可以使用 `goto` 语句将程序的控制权直接转移到指定标签（label）处。然而，`goto` 语句在结构化编程中的使用受到争议，因为它可能导致代码变得难以理解和维护。大多数情况下，可以使用更结构化的控制流语句（如 `if`、`while`、`for`）来替代 `goto`。

下面是一个简单的示例，演示了 `goto` 语句和标签的使用：

{% code title="3.8.1 goto-label.c" lineNumbers="true" %}

```c
#include <stdio.h>

int main() {
    int i = 0;

    // 定义标签
    start:

    if (i < 5) {
        printf("%d\n", i);
        i++;
        goto start; // 跳转到标签 start
    }

    return 0;
}
```

{% endcode %}

在上述示例中，使用 `goto` 语句和标签 `start` 实现了一个简单的循环。每次循环打印 `i` 的值，然后递增 `i`，再次跳转到 `start` 标签。这样会一直循环打印 `0` 到 `4` 的值。

虽然 `goto` 可以在某些情况下提供一种简便的控制流方式，但过度使用它可能导致代码难以理解。在大多数情况下，更好的选择是使用更结构化的控制流语句。
