了解C errno
我的系统errno
定义为:
int * __error(void); #define errno (* __error())
我理解errno
是一个宏并扩展为* __error()
函数:
-
我到处搜索(我的系统上的源代码),但我找不到
__error()
函数的定义,有人可以显示/解释它的定义是什么/应该是什么? -
表达式
errno = 0
如何使用上面的定义(将0
分配给函数?)?errno = 0
会扩展为* __error() = 0
吗?
谢谢
__error
函数返回一个指向调用线程的errno
变量的指针。 errno
宏取消引用该指针,从而产生一个可以出现在等号两侧的左值。
回答你的问题:
-
该函数确定该特定线程的
errno
变量的正确地址。 每个线程都有自己的。 -
是的,它变成
(* __error()) = 0;
它为该线程的errno
变量赋值0
。