函数如何在 c 中返回左值?

问题描述 投票:0回答:1

我阅读了 Linux 编程接口 29-2 线程和 errno 下一个:

在 Linux 上,线程特定的 errno 以与大多数其他 UNIX 实现类似的方式实现:errno 被定义为一个宏,它扩展为一个函数调用,返回一个可修改的左值,该左值对于每个线程都是不同的。

我想知道函数如何返回可修改的左值。

c linux multithreading pthreads
1个回答
5
投票

“返回”可修改左值的是宏,而不是函数调用本身。该函数返回一个指针,宏取消引用该指针。比如glibc源码的

errno.h
定义宏
errno
是这样的:

# define errno (*__errno_location ())

这个措辞有点误导:

errno
被定义为一个宏,它扩展为一个函数调用,返回一个可修改的左值,该左值对于每个线程都是不同的。

更准确的措辞是:

errno
被定义为扩展为 包含函数调用的表达式的宏。该表达式的计算结果为 一个可修改的左值,该左值对于每个线程都是不同的。

© www.soinside.com 2019 - 2024. All rights reserved.