我有一个在C中运行的无限while循环的代码.在它内部,它有几个嵌套的循环执行一些任务.但是在内部for循环的某个点上,为了处理错误,我被迫在外部while的下一次迭代中继续执行.

main_loop:
    while (1) {
        //Some functionalities...
        for (j = 0; j < num; j++) {
            for (k = 0; k < num; k++) {
                goto main_loop; // Continue the while loop
            }
        }
    }

如果我写为continue;,它将继续for迭代.我知道我可以添加一些标志来控制所有循环的执行流,并修改这些标志来实现continue操作.但我最终决定使用goto句话来打破内部循环,继续进行While所希望的迭代.

由于goto可能导致意大利面条代码的情况,我想知道goto的这个用例是否足够正确,或者是否有任何其他特定的方法来继续C中类似代码库的外部循环?

推荐答案

你的问题实际上包含了own个答案:

gotocan导致意大利面代码的情况时,...

goto这样的东西的主要问题是它们may导致不可读的代码,而不是它们总是do.盲目拒绝使用语言功能的人,因为他们不理解这一点,是在伤害自己.

另一个例子是快速失败策略,在该策略中,您在函数开始时判断必需的条件,如果没有全部满足,则简单地返回一个错误.那些轻视一个函数中的多个返回点的人在看到这一点时往往会大发雷霆,在我看来,这往往是一个很好的理由将其添加到拉请求中:-)

然而,无论是在这种情况下,还是在您的情况下,他们为了遵守"规则"而得出的代码通常都是less可读的.

归根结底,当然有指导方针是有原因的.但是,除非你知道这些理由存在的原因,并对其加以理解,否则你不是真正的 artisan (我使用这个词是因为同样的推理实际上适用于许多努力领域).

C++相关问答推荐

问关于C中的指针和数组

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

fwrite无法写入满(非常大)缓冲区

如何在C中引发/处理自定义信号?

为什么该函数不将参数值保存到数据 struct 中?

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

如何使用[BTStack]BLE发送大型(>;2kb)信息包

函数的限制限定指针参数允许优化调用方函数吗?

&;(str[i])和(&;str)[i]有什么区别?

如何在STM8项目中导入STM8S/A标准外设库(ST VisualDeveloper)?

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

C中的FREE函数正在触发断点

如何在提取的索引中分配空值?

指向不同类型的指针是否与公共初始序列规则匹配?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

递归打印二维数组(C编程)

有没有办法减少C语言中线程的堆大小?

分配给静态变量和动态变量的位置之间有区别吗?

C循环条件内的函数

指向返回 struct 成员的指针,安全吗?