C 开头双下划线的含义

C 开头双下划线的含义,c,linux,gcc,x86-64,glibc,C,Linux,Gcc,X86 64,Glibc,在标准库(glibc)中,我看到使用前导双下划线定义的函数,例如sys/mman.h中的\uu mmap。目的何在?我们怎么还能调用一个似乎在任何地方都没有声明的函数mmap。我的意思是我们包括了sys/mman.h,但是sys/mman.h没有声明mmap,它只声明了GNU手册中的\uu mmap: 除本手册中记录的名称外,保留名称 包括所有外部标识符(全局函数和变量) 以下划线(“”)和所有标识符开头,不考虑使用 以两个下划线或一个下划线后跟 大写字母是保留的名称。这是为了图书馆和图书馆 头

在标准库(glibc)中,我看到使用前导双下划线定义的函数,例如
sys/mman.h
中的
\uu mmap
。目的何在?我们怎么还能调用一个似乎在任何地方都没有声明的函数
mmap
。我的意思是我们包括了
sys/mman.h
,但是
sys/mman.h
没有声明
mmap
,它只声明了GNU手册中的
\uu mmap

除本手册中记录的名称外,保留名称 包括所有外部标识符(全局函数和变量) 以下划线(“”)和所有标识符开头,不考虑使用 以两个下划线或一个下划线后跟 大写字母是保留的名称。这是为了图书馆和图书馆 头文件可以为内部文件定义函数、变量和宏 目的不存在与用户程序中的名称冲突的风险


这是C和C++厂商使用的一种约定。

具有领先的双下划线的名称被内部实现,供实现(编译器/标准库等)使用。它们不应该出现在代码中。此保留名称空间的目的是提供它们可以使用的系统头名称,而不会与程序中使用的名称发生潜在冲突。

7.1.3保留标识符

每个标题声明或定义其标题中列出的所有标识符 关联的子类,并可选地声明或定义标识符 在其相关的未来库说明子条款中列出,以及 始终保留用于任何用途或用作 文件作用域标识符

-以 下划线和大写字母或其他下划线是相同的 始终保留供任何使用

-以 下划线始终保留用作文件范围的标识符 在普通和标记名称空间中


双下划线:(问题表示C++,但<代码> < <代码>也来自ANSI C标准)。此外,在我的
sys/mman.h
版本中,定义了
mmap
\uu mmap
未由glibc在任何地方声明。不知道你在说什么。你是在看内核头,不是glibc头吗?我喜欢你对我很好的回答。