gpt4 book ai didi

c - 为什么在宏中使用保留名称(以 _ 开头)?

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:48 25 4
gpt4 key购买 nike

以双下划线开头的标识符是 reserved in C .

那为什么我在statement expressions里面的Linux内核这样的代码中经常看到这样的标识符呢? ?

例如,container_of 宏:

#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})

为什么那里的临时值叫做 __mptr 什么是保留名称?为什么不只是 mptr

最佳答案

您的示例来自 Linux 内核。内核是一个特殊的程序。

它的许多头文件构成了操作系统用户空间 SDK 的一部分。因此,任何导出到用户空间的内核头文件都需要使用实现保留的标识符来获取宏实现细节。

此外,由于内核无论如何都不使用标准 C 库/运行时,因此它不会与标准 C 库头文件使用的保留标识符发生冲突(除了实际上属于内核源代码本身)。

此外,编写内核源代码时需要了解许多编译器实现细节才能正确编译和运行,因此作者很可能了解编译器使用的保留标识符,并能够避免与它们发生冲突。

由于这些原因,简单地编写所有内核宏(无论它们是否导出到用户空间)以仅在内部使用保留标识符可能是最简单的策略。

关于c - 为什么在宏中使用保留名称(以 _ 开头)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22855079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com