了解C errno

我的系统errno定义为:

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

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

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

  2. 表达式errno = 0如何使用上面的定义(将0分配给函数?)? errno = 0会扩展为* __error() = 0吗?

谢谢

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

回答你的问题:

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

  2. 是的,它变成(* __error()) = 0; 它为该线程的errno变量赋值0