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

これは適切にコーディングされているとは思いませんが、最適化する方法がわかりませんでした。

「パート 1 コード」でエラーが発生した場合にのみ、「パート 2 コード」を 1 回だけ実行します。

正しく実行する方法を教えてください。原因は、パート 2 が 1 回実行された後、現在は何も返されません。

4

3 に答える 3

2

ループが必要ない場合は、ifand を使用できますreturnerrは使用しないので、省略しても構いません。

// 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

「パート 1 コード」でエラーが発生した場合にのみ、「パート 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 に答える