45

我对两种不同的方法有两次调用:

void func1() 
{
  // do something 
  if (fail) 
  {
    // then set errno to EEXIST

  }

}

第二种方法:

void func2() 
{
  // do something 
  if (fail) 
  {
    // then set errno to ENOENT

  }

}
  1. 当我将 设置errno为某个值时,它会做什么?只是错误检查?

  2. 如何errno在上述方法中设置func1func2EEXISTENOENT

谢谢

4

3 回答 3

73

出于所有实际目的,您可以将其视为errno全局变量(尽管通常不是)。所以包括errno.h并使用它:

errno = ENOENT;

您应该问自己是否errno是最适合您的错误报告机制。这些函数可以设计为自己返回错误代码吗?

于 2012-07-28T08:55:18.300 回答
12

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的实现。

于 2013-01-20T03:57:05.853 回答
4
#include <errno.h>
void func1() 
{
  // do something 
  if (fail) 
  {
    errno = ENOENT;
  }
}
于 2012-07-28T08:55:51.303 回答