我有一个状态机和一些回调机制,任务运行器会调用函数。在此背后,有一个有四种状态的状态机,其中有些互斥,而其他一些可以组合,这使得规则集相当复杂。如果尝试任何非法操作,则其中一个函数应该向用户显示错误消息(此处为了简单起见使用 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
,而且你所做的只是一个低劣版本的异常处理。定义自己的异常类,其中包括你的errorCode
值并进行throw
抛出。 - tadmangoto
是可用的最清晰、最明确的替代方案。因为教条主义的信念认为goto
是不好的,而拒绝了最干净、最清晰的代码,这不是一个理性的决定。 - John Bollinger