Moh*_*ad 3 c linux multithreading pthreads
我读了《Linux 编程接口 29-2 线程》和 errno下一个:
在 Linux 上,线程特定的 errno 的实现方式与大多数其他 UNIX 实现类似:errno 被定义为一个宏,该宏扩展为函数调用,返回每个线程不同的可修改左值。
我想知道函数如何返回可修改的左值。
“返回”可修改左值的是宏,而不是函数调用本身。该函数返回一个指针,宏取消引用该指针。例如,errno.hglibc源代码中定义的宏errno是这样的:
# define errno (*__errno_location ())
Run Code Online (Sandbox Code Playgroud)
这个措辞有点误导:
errno被定义为一个宏,它扩展为一个函数调用,返回一个对于每个线程都是不同的可修改的左值。
更准确的措辞是:
errno定义为扩展为包含函数调用的表达式的宏。该表达式的计算结果是一个可修改的左值,该左值对于每个线程都是不同的。