我有一个在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++相关问答推荐

想了解 struct 指针和空指针转换

无效使用未定义类型'structsquare'?

在C中使用强制转换将uint16_t转换为uint8_t [2]是否有效?

将 typewriter LF打印到Windows终端,而不是隐含的CR+LF

将整数的.csv文件解析为C语言中的二维数组

为什么在此程序中必须使用Volatile关键字?

减法运算结果的平方的最快方法?

C是否用0填充多维数组的其余部分?

GCC创建应用于移动项的单独位掩码的目的是什么?

struct -未知大小

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

getline()从c中的外部函数传递指针时输出null

在C++中父进程和子进程中的TAILQ队列同步问题

GETS()在C++中重复它前面的行

try 查找带有指针的数组的最小值和最大值

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

与指针的原始C数组或C++向量<;向量<;双>>;

在C中定义函数指针?

我该如何处理这个 C 90 代码中的内存泄漏?

如何让 unlinkat(dir_fd, ".", AT_REMOVEDIR) 工作?