【问题标题】:How do multiple goto labels work多个 goto 标签如何工作
【发布时间】:2015-08-03 19:07:36
【问题描述】:

快速提问:

假设我正在使用 C 代码并调用 goto 以转到特定标签,但我有多个标签:

goto A;

   A:
   //something
   B:
   //something else
   C:
   //something else

当我转到 A 时,我会同时执行 B 和 C 还是直接退出函数?

【问题讨论】:

  • 它会按照它所说的去做:只需goto label A
  • 我很好奇,为什么会退出函数?
  • 为什么要问这样的问题?这将花费不到一分钟的时间来检查。
  • 我投票决定将此问题作为离题结束,因为它可以由用户轻松测试(无需询问)。

标签: c function goto callstack


【解决方案1】:

标签只是代码中的锚。它不是代码,标签本身没有被执行。 goto 语句“跳转”到使用goto 语句中存在的标签标记(前缀)的语句。代码从那里继续运行,并且执行和以前一样遵循所有规则(关于 if/else 分支、循环、返回等所有内容)。

代码不会“退出”函数;当执行到达return 语句时,它从函数“返回”。如果函数体中没有return 语句,则在执行到函数体结束大括号(})时返回。

【讨论】:

    【解决方案2】:

    在每个标签后添加返回,例如==

    goto A;
       A:
       //something
    return;
       B:
       //something else
    return;
       C:
       //something else
    

    最后一个不需要 享受....

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多