4

新しい C API で errno を使用することをお勧めしますか?

http://developer.gnome.org/glib/stable/glib-Error-Reporting.htmlのような問題を報告する他の方法を代わりに使用する必要がありますか?

おすすめは何ですか?

4

2 に答える 2

4

errnoC 標準ライブラリに予約する必要があるため、プログラムはそれを読み取り専用の値として扱う必要があります。

新しいコードを書く エラー コード チェックに errno スタイルのグローバル変数を使用することは強くお勧めしません。functions がaあり、bそれらのステータスを報告するとしますab_error。次のように記述する必要があります。

a();
if( ab_error == AB_NOERROR ) {
    b();
    if( ab_error == NO_ERROR ) {
        /* ... */
    }
}

おわかりのように、ネスト レベルをすばやく積み上げることができます。ただし、関数がエラー コードを返した場合は、次のように記述できます。

int error_a;
int error_b;

if( (error_a = a()) == A_NOERROR
 && (error_b = b()) == B_NOERROR
){
    /* ... */
} else {
    /* test the error variables */
}

次のように、複数のエラー条件を連鎖させることもできます。

int error_a;
int error_b;
int error_c;

if( (error_a = a()) == A_NOERROR
 &&  ( (error_b = b()) == B_NOERROR
    || (error_c = c()) == C_NOERROR )
){
    /* ... */
} else {
    /* test the error variables */
}

これは、複数のネストされた if ステートメントに全体を分散させる場合よりもはるかに読みやすくなります。

于 2011-04-23T11:31:21.140 に答える
1

errno複数のスレッド (またはグローバル変数の個別のコピーを含まない他の形式の同時実行) を使用するプログラムで、グローバルがどの程度うまく機能するかをいつでも自問できます。典型的な結論は「あまりよくない」である可能性が高いため、他の解決策が望ましい場合があります。

于 2011-04-23T13:12:23.450 に答える