2つの異なるメソッドを2回呼び出しています。
void func1()
{
// do something
if (fail)
{
// then set errno to EEXIST
}
}
そして2番目の方法:
void func2()
{
// do something
if (fail)
{
// then set errno to ENOENT
}
}
errno
をある値に設定すると、どうなりますか?エラーチェックだけですか?
上記のメソッドでerrno
を設定するにはどうすればよいですかfunc1
およびfunc2
からEEXIST
およびENOENT
へ
ありがとう
すべての実用的な目的のために、errno
をグローバル変数のように扱うことができます(通常はそうではありません)。したがって、errno.h
そしてそれを使用するだけです:
errno = ENOENT;
errno
が目的に最適なエラー報告メカニズムであるかどうかを自問する必要があります。エラーコードを返すように関数を設計できますか?
IMO、システムレベル用に設計された標準errno
。私の経験はそれらを汚染しないことです。 C標準のerrno
メカニズムをシミュレートする場合、次のような定義を行うことができます。
_/* your_errno.c */
__thread int g_your_error_code;
/* your_errno.h */
extern __thread int g_your_error_code
#define set_your_errno(err) (g_your_error_code = (err))
#define your_errno (g_your_error_code)
_
また、your_perror(err_code)
を実装することもできます。詳細については、glibcの実装を参照してください。
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}