私はソフトウェアプロジェクト用のCライブラリを作成しています。私はいくつかのエラー報告をする必要がありますが、自分自身の複雑なエラーコード、変数、関数を実装するのは少し怠惰です。カスタムエラー報告のためにlibcが提供するerrno機能を使用することは許容されますか?私のすべてのエラーは、E...
マクロによって与えられたカテゴリに収まります。アプリケーション/ライブラリエラーの報告にerrnoを使用
たとえば、私のコードに16進表記のSHA256ハッシュを読み込んでそれを何らかの内部形式に変換する関数があるとします。もちろん
#include <errno.h>
int hash_fromstr(hash_t *out, const char *in) {
/* ... */
if (strlen(in) != 65) {
errno = EINVAL;
return -1;
}
/* ... */
}
この例では、実際にはるかにエラーが他の機能に起こることがあり、途方もなく単純化している:私は、エラーを報告するerrno
を使用したいです。
あなたのライブラリにリンクするユーザアプリケーションの他の部分で、 'errno'の適切な機能を損なうことなく、あなたのライブラリが標準エラーコードを出すことができれば、問題はありません。おそらく、あなたは 'errno'変数を使用するかもしれませんが、それを変更せず、そのコピーを返すでしょうか? – Chimera
@Jimライブラリ自体の内部で発生するエラーに対して 'errno'を使用したいと思います。ライブラリによって呼び出されるlibcの関数である必要はありません。 – fuz
ライブラリの呼び出し元にエラーを報告するために 'errno'の値を設定しても問題ないのですか?もしそうなら、http://stackoverflow.com/questions/9856822/should-i-set-errno – Chimera