C goto 语句

本文带您了解 C 语言中的 goto 语句的用法,以及是否应该使用 goto 语句。

goto 语句允许我们将程序的控制权转移到指定的标签。

goto 语句的语法

goto label;
... .. ...
... .. ...
label:
statement;

label 是一个标识符,用来标记一段代码。当遇到 goto 语句时,程序的控制跳转到 label: 并开始执行代码。

goto 语句
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);

      // go to jump if the user enters a negative number
      if (number < 0.0) {
         goto jump;
      }
      sum += number;
   }

jump:
   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;
}
... .. ...

goto 语句让你的程序跳来跳去,不好控制。这很容易引入缺陷。

话虽如此, goto 有时可能很有用。例如:打破嵌套循环。

你应该使用 goto 吗?

如果您认为使用 goto 语句简化了您的程序,您可以使用它。但是大多数情况下, goto 很少有用,您可以在不使用 goto 时创建任何 C 程序。

以下是引用自 C++ 的创造者 Bjarne Stroustrup 的一句话。

goto 可以做任何事情的事实正是我们不使用它的原因。