gpt4 book ai didi

goto的C用法

转载 作者:行者123 更新时间:2023-12-03 23:26:39 25 4
gpt4 key购买 nike

我有一个带有某种回调机制的状态机,函数由任务运行程序调用。这一切的背后是一个状态机,它有4种状态,有的相互排斥,有的可以组合,形成了相当复杂的规则集。如果尝试任何非法操作,其中一个函数应该向用户显示错误消息(为了简单起见,printf 此处):

static int state1 = 0;
static bool switch2 = 1;

void do_stuff(int value){
int errorCode = 0;
if(state1 == 1){
errorCode = -1;
goto ERROR;
}
if(state1 == 2 && switch2)
{
errorCode = 2;
goto ERROR;
}


printf("No error!");
return;
ERROR:
printf("%d", errorCode);
}

这是我能想到的最短和最简洁的方法,但它一直被认为使用 goto 是一件坏事。有没有更好的方法来解决这个问题,或者在稳定性和维护方面这是最好的方法吗?

最佳答案

goto 很少是控制流的正确解决方案。虽然 goto 有一些有效的用例,但在这个特定的函数中,您可以简单地将控制流重构为 if-else 分支,如下所示:

void do_stuff(int value)
{
int errorCode = 0;

if (state1 == 1)
{
errorCode = -1;
}
else if (state1 == 2 && switch2)
{
errorCode = 2;
}
else // unconditional case for no errors
{
printf("No error!");
return;
}
printf("%s", errorCode); // if control reaches here, print the error
}

关于goto的C用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63456160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com