我有两种不同方法的调用:
void func1()
{
// do something
if (fail)
{
// then set errno to EEXIST
}
}
第二种方法:
void func2()
{
// do something
if (fail)
{
// then set errno to ENOENT
}
}
当我将errno
设置为某个值时,它会做什么?只是错误检查?
如何在上述方法中设置errno
func1
和func2
至EEXIST
和ENOENT
谢谢
答案 0 :(得分:52)
出于所有实际目的,您可以将errno
视为全局变量(尽管通常不会)。所以请加入errno.h
并使用它:
errno = ENOENT;
您应该问问自己errno
是否是最适合您的错误报告机制。功能是否可以设计为自己返回错误代码?
答案 1 :(得分:9)
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 的实现。
答案 2 :(得分:4)
#include <errno.h>
void func1()
{
// do something
if (fail)
{
errno = ENOENT;
}
}