3

在我的系统上errno定义为:

int *    __error(void);
#define errno    (* __error())

我理解errno是一个宏并扩展为* __error()功能:

  1. 我到处搜索(我系统上的源代码),但我找不到__error()函数的定义,有人可以显示/解释它的定义是什么吗?

  2. 表达式如何errno = 0与上述定义一起工作(分配0给函数?)?errno = 0扩展* __error() = 0为?

谢谢

4

1 回答 1

8

__error函数返回一个指向errno调用线程变量的指针。宏取消引用该errno指针,从而产生一个可以出现在等号两侧的左值。

要回答您的问题:

  1. 该函数确定该errno特定线程的变量的正确地址。每个线程都有自己的。

  2. 是的,它变成(* __error()) = 0;了分配0给该线程errno变量的那个。

于 2012-12-27T01:06:50.360 回答