开关柜避免环路

switch case avoid loop

本文关键字:环路 开关柜      更新时间:2023-10-16

我有以下代码:

int send_cmd( int sock, char * buffer, int lbuffer )
{
    int err = 0;
    //do_something part 1
while(1)
    switch(check_status(buffer)){
            case 1:
                return 0;
                 break;
            case 0:
                if (err > 0)
                    break;
                //do_something part 2
                err = 1;
            }
        return -1;
    }

我不认为这是很好的编码,但我不知道如何优化它。

我想只运行"第二部分代码"一次,并且只有当"第一部分代码"出错时才运行。

你能告诉我如何使它正确运行吗?

我想只运行"第二部分代码"一次,并且只有当"第一部分代码"出错时才运行。

不需要while循环或switch语句

// Do something part 1
if (check_status(buffer) == 1) {
   return 0;
}
// Do something part 2
if (check_status(buffer) == 1) {    
   return 0;
}
else {
    return -1;
}

如果您不需要循环,您可以只使用ifreturn。既然你不使用err,你也可以省略它。

// first command
int status = check_status(buffer);
if (status == 1)
    return 0;
// second command
status = check_status(buffer);
if (status == 1)
    return 0;
return -1;

至少在这个简单的情况下,switch并不比if更好或更快。也许在某些情况下,这是正确的,但我不会打赌。通常,无论您使用switch还是if,优化器都足以发出最优的机器码。因此,选择简单、易读和可维护的代码。

看你的,我认为这是你试图实现使用err变量:

//Part 1
if ( check_status(buffer) ) return 0; //No error
//Part 2
if ( check_status(buffer) ) return 1; //One error
else return -1;  //Two errors

你不需要任何while循环来做这个。