9

私は、使用されているライブラリ関数のほとんどがエラー時に -1 を返し、 errno を設定するプログラムを書いています。プログラムの動作は、エラーが発生した場合に終了するようなものです。プログラムの外部から正確な終了点とエラーを特定するには (例: を使用gdb)、次の方法を使用します。

err = func_1(..arglist_1..);
if(err != 0)
{
    perror("func(..arglist..)");
    return ((1u << 8) | errno);
}
//..
//.. some more funcs
//..
err = func_n(..arglist_n..);
if(err != 0)
{
    perror("func(..arglist_n..)");
    return (((unsigned)n << 8) | errno);
}

ここでの問題は、安全な仮定です。

現実: errnoextern int errno;は内部で宣言されていますerrno.h
仮定 1: errnoの値は常に 255 未満です。
仮定 2: errnoは常に正です。

で定義されているすべてのエラー定数 (EAGAIN など) にerrno.h基づいて、これらの仮定は現在正しいです。これらは将来も真実であると仮定できますか?

perror()PS:出口点を決定するために依存したくありません。

4

1 に答える 1