14

ソフトウェア プロジェクト用の C ライブラリを作成しています。エラー報告を行う必要がありますが、エラー コード、変数、および関数の複雑なセットを独自に実装するのが少し面倒です。libc が提供するカスタム エラー報告用の errno 機能を使用することは許容されますか? E...私のすべてのエラーは、マクロによって指定されたカテゴリに当てはまります。

たとえば、コードに SHA256 ハッシュを 16 進数表記で読み取り、それをある種の内部形式に変換する関数が含まれているとします。errnoエラーを報告するために使用したい:

#include <errno.h>

int hash_fromstr(hash_t *out, const char *in) {
  /* ... */

  if (strlen(in) != 65) {
    errno = EINVAL;
    return -1;
  }

  /* ... */
}

もちろん、この例は非常に単純化されています。実際には、他の関数でさらに多くのエラーが発生する可能性があります。

4

2 に答える 2

8

errno の値は自由に変更できますが、errno が設定される原因となる内部標準エラーをライブラリ コードが適切に検出できるようにするために、実行する前にライブラリ コードで errno が設定されていないことを確認してください。詳細については、 「errno を設定する必要がありますか」も参照してください。

于 2012-05-14T21:24:31.107 に答える
1

はい、それを変更することができ、スレッド スコープを持っています。これは、その種のエラー処理において非常に望ましいものです。

errno エラー ファミリ ( E...) を使用し、おそらくそれを拡張すると、非常に強力でありながら単純なエラー処理パターンになる可能性があります。他の人からは味の悪いアプローチと見なされるかもしれませんが、私見では、よりクリーンなコードとエラー処理の標準化されたパターンを生成します。

于 2014-10-28T17:12:59.520 に答える