亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 语言 goto 语句详解:语法、实战用法与最佳实践

C 语言 goto 语句详解

本指南讲解 C 语言 goto 语句工作原理、正确语法、适用场景及为何现代代码普遍不推荐使用。


goto 语句语法

goto label;
...
label: statement;

label 为标识符后跟冒号。执行 goto 时控制流直接跳转到该标签行。

C 语言 goto 语句详解:语法、实战用法与最佳实践

示例:用 goto 提前退出循环

#include <stdio.h>
int main() {
    const int maxInput = 100;
    int i;
    double number, average, sum = 0.0;
    for (i = 1; i <= maxInput; ++i) {
        printf("%d. Enter a number: ", i);
        scanf("%lf", &number);
        /* 输入负数则跳出循环 */
        if (number < 0.0) {
            goto exit_loop;
        }
        sum += number;
    }
    exit_loop:
    average = sum / (i - 1);
    printf("Sum = %.2f\n", sum);
    printf("Average = %.2f", average);
    return 0;
}

输出

1. Enter a number: 3
2. Enter a number: 4.3
3. Enter a number: 9.3
4. Enter a number: -2.9
Sum = 16.60
Average = 5.53

为何多数开发者避免 goto

goto 易产生“面条代码”,难读、难测、难维护。例如:

one:
for (i = 0; i < number; ++i) {
    test += i;
    goto two;
}
two:
if (test > 5) {
    goto three;
}
// ...

跳出嵌套作用域或跨复杂控制结构常隐藏程序流向,导致难诊断的 bug。


goto 仍可能适用的场景

虽罕见,goto 可简化特定场景:

慎用,且必须文档化跳转意图,便于后续维护者理解。


你应该用 goto 吗?

现代 C 程序中,结构化控制流——循环、函数、switch——覆盖了 goto 绝大多数用例。C 标准与最佳实践建议除非有充分理由否则避免使用。Bjarne Stroustrup 曾言:"'goto' 能做任何事正是我们不用它的原因。"

若结构化代码能实现同等逻辑,请选择结构化路径。仅在极少数有充分理由的场景保留 goto,并详细记录文档。

C语言

  1. 传呼机(BP机)技术:从早期创新到未来双向通信
  2. 物料编号/料号:库存管理与销售追溯的唯一身份标识
  3. 掌握 C# 条件逻辑:if、if-else、if-else if 与嵌套 if 语句完全指南
  4. 掌握 C# switch 语句:语法、示例与最佳实践
  5. C# break 语句:用法、时机与实战示例
  6. 掌握 C# continue 语句:高效跳过循环迭代的实战指南
  7. 掌握 C++ 条件语句:if、if-else、嵌套 if 与多重分支全解析
  8. 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
  9. 掌握 C++ switch-case 语句:语法、流程与计算器实战案例
  10. C 语言基础语法精通:Token、分号、注释与标识符规范
  11. 精通Python Pass语句:实战指南
  12. Python 数字类型详解:不可变数值数据的操作与数学函数