在我的系统errno
定义为:了解ç错误号
int * __error(void);
#define errno (* __error())
我明白errno
是一个宏,扩展为* __error()
功能:
我找遍(来源我的系统上),但我找不到
__error()
函数的定义,有人可以显示/解释它的定义是什么/应该是什么?表达式
errno = 0
如何与上述定义一起工作(将0
分配给函数?)?errno = 0
扩大到* __error() = 0
?
由于
在我的系统errno
定义为:了解ç错误号
int * __error(void);
#define errno (* __error())
我明白errno
是一个宏,扩展为* __error()
功能:
我找遍(来源我的系统上),但我找不到__error()
函数的定义,有人可以显示/解释它的定义是什么/应该是什么?
表达式errno = 0
如何与上述定义一起工作(将0
分配给函数?)? errno = 0
扩大到* __error() = 0
?
由于
的__error
函数返回一个指针调用线程的errno
变量。 errno
宏解引用那个指针,导致一个左值可以出现在等号的两边。
回答您的问题:
的功能决定的正确地址为特定线程errno
变量。每个线程都有自己的。
是的,它变成(* __error()) = 0;
它将0
分配给该线程的errno
变量。
感谢您的回答,这意味着我的操作系统函数'__error()'有一个定义为'int * __error(){return &errno;}',我说得对吗?而'errno'是.c文件中的'static int errno' ?? – Orion
@ManiH:可能会更复杂一些,返回的errno不会是全局的,而是来自某种线程本地存储(即每个线程都有一个“errno”实例,以及'__error()'实现将检索一个指向与当前线程相关的实例的指针)。 –
仅供参考,您可以告诉我们“我的系统”是什么吗? –