0

我有以下代码:

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;
    }

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

我只想运行一次“第 2 部分代码”,并且只有在“第 1 部分代码”出现错误的情况下。

你能告诉我如何让它正确运行吗?因为在第 2 部分执行一次后,现在不会返回任何内容。

4

3 回答 3

2

如果您不需要循环,则可以使用ifand return。由于您不使用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。所以选择简单、可读和可维护的代码。

于 2013-01-01T15:22:35.003 回答
2

我只想运行一次“第 2 部分代码”,并且只有在“第 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;
}
于 2013-01-01T15:29:55.173 回答
1

看着你,我认为这是你试图使用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 循环来执行此操作。

于 2013-01-01T15:31:23.067 回答