在本主题中,我们将查看在C或C++中很好地使用goto的示例.它的灵感来自an answer个人的投票,因为他们认为我是在Jest .

摘要(标签从原始更改为使意图更清楚):

infinite_loop:

    // code goes here

goto infinite_loop;

为什么它比其他 Select 更好:

  • 这是很具体的.goto是 语言构造,该语言构造导致 无条件分支.替代方案 依赖于使用 struct 支持条件分支, 总是带着一种堕落的态度-是真的 条件.
  • 标签记录了意图
  • 读者不必浏览网页

Rules:

  • 假装哥特恐惧症没有
  • 假设我们都听说过
  • 如果你不同意一个例子,

看看我们能否像成年人一样谈论这件事.

Edit

这个问题现在似乎已经结束了.它产生了一些高质量的答案.谢谢大家,

考虑到其他人的react ,我发现很多人认为goto是你一直想要的东西

我将接受第一个答案,它给出了分支到清理块的C模式.在我看来,这无疑是goto条发布答案中最有力的一条

推荐答案

这里有一个我听说过人们使用的技巧.但我从未在野外见过它.它只适用于C,因为C++有更多的习惯用法.

void foo()
{
    if (!doA())
        goto exit;
    if (!doB())
        goto cleanupA;
    if (!doC())
        goto cleanupB;

    /* everything has succeeded */
    return;

cleanupB:
    undoB();
cleanupA:
    undoA();
exit:
    return;
}

C++相关问答推荐

为什么macOS上的FIFA管道比匿名管道慢8倍?

了解返回函数指针的函数定义

为什么在传输 Big Data 时共享内存段的运行时间比管道更长?

segfault在C中使用getline()函数

不同到达时间的轮询实现

C语言中字符数组声明中的标准

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

如何在C宏中确定 struct 中元素的类型?

有没有可能我不能打印?(C,流程)

是否所有C编译器在将浮点数转换为整型数时都会隐式删除小数?

为什么net/if.h在ifaddrs.h之前?

将uintptr_t添加到指针是否对称?

S的这种管道实施有什么问题吗?

在另一个函数中使用realloc和指针指向指针

Cairo STM32MP1 cairo_Surface_WRITE_TO_PNG始终返回CAROLIO_STATUS_WRITE_ERROR

获取前2个连续1比特的索引的有效方法

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

将数组中的所有元素初始化为 struct 中的相同值

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码