我是C编程的初学者,遇到过errno
声明。我阅读了POSIX errno
的手册页,它必须是线程本地的。这是手册页中的报价:
ISO C标准将errno定义为int类型的可修改左值,并且不能明确声明; errno可能是宏。 errno是线程本地的;将其设置在一个线程中不会 影响它在其他任何线程中的值。
现在看看errno.h
,我发现了:
/* Declare the `errno' variable, unless it's defined as a macro by
bits/errno.h. This is the case in GNU, where it is a per-thread
variable. This redeclaration using the macro still works, but it
will be a function declaration without a prototype and may trigger
a -Wstrict-prototypes warning. */
#ifndef errno
extern int errno;
#endif
据我所知,它看起来不像线程局部变量。是什么使errno
成为线程本地的?