私は、使用されているライブラリ関数のほとんどがエラー時に -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:出口点を決定するために依存したくありません。