开头的双下划线的含义

pyt*_*nic 21 c linux gcc glibc x86-64

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

dir*_*tly 17

从GNU的手册:

除了本手册中记录的名称外,保留名称还包括以下划线('_')开头的所有外部标识符(全局函数和变量)以及所有标识符,无论使用哪个以下划线开头,或者下划线后跟一个下划线大写字母是保留名称.这样,库和头文件可以为内部目的定义函数,变量和宏,而不会有与用户程序中的名称冲突的风险.

这是C和C++供应商也使用的约定.


R..*_*R.. 7

具有前导双下划线的名称保留供实现(编译器/标准库/等)内部使用.它们永远不会出现在您的代码中.此保留命名空间的目的是为它们提供可以使用的系统标头名称,而不会与程序中使用的名称发生冲突.


Lun*_*din 7

ISO 9899:2011

7.1.3保留标识符

每个标头声明或定义其关联子条款中列出的所有标识符,并可选地声明或定义其关联的未来库方向子条款和标识符中列出的标识符,这些标识符始终保留用于任何用途或用作文件范围标识符.

- 所有以下划线开头的标识符以及大写字母或另一个下划线 始终保留用于任何用途.

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