在标准库(glibc)中,我看到用前导双下划线定义的函数,例如sys/mman.h
中的__mmap
。什么目的?我们又如何调用一个函数mmap
,这个函数似乎没有在任何地方声明。我的意思是我们包括sys/mman.h
那,但sys/mman.h
不宣布mmap
,它只宣布__mmap
。开头的双下划线的含义
19
A
回答
16
从GNU手册:
除了本手册中记载的名称,保留名称 包括所有外部标识符(全局函数和变量) 开始以下划线(“_”)和所有标识符,不管使用 是以两个下划线还是下划线开头,后面跟着一个大写字母 是保留名称。这样库和头文件就可以定义用于内部目的的函数,变量和宏,而不会与用户程序中的名称发生冲突。
这是C和C++供应商也使用的惯例。
5
具有前导双下划线的名称由实现(编译器/标准库/等)保留供内部使用。他们不应该出现在你的代码中。这个保留的命名空间的目的是为了提供他们可以使用的系统头名称,而不会与程序中使用的名称发生冲突。
+0
我喜欢你的回答,对我很友善。 –
6
ISO 9899:2011
7.1.3保留标识符
每个头声明或定义在其相关联的 子条款中列出的所有的标识符,并且任选地声明或定义在其相关联的未来库中列出的标识符 方向子条款和 标识符,该标识符总是被保留用于任何用途或用作 文件范围标识符。
- 这与 下划线和大写字母或另一个下划线开头的所有标识符 总是保留用于任何用途。
- 以 下划线开头的所有标识符始终保留用作普通标签名称空间和标签名称空间中文件范围为 的标识符。
相关问题
- 1. 下划线:'_:_'的含义
- 2. python下划线'_'的含义
- 3. 如何找到以双下划线开头的python方法?
- 4. Python文件名中双下划线的含义
- 5. DBPedia:URI中'__1'(双下划线)的含义是什么?
- 6. 双下划线($ _。value__)的含义是什么?
- 7. 以下划线开头的类成员(_)
- 8. Django的双下划线
- 9. Python的双下划线
- 10. 双下划线的python
- 11. WaitCallback中下划线的含义
- 12. SMTLIB/z3/stp:下划线的含义?
- 13. Groovy中下划线的含义
- 14. MySQL表名以下划线开头。特别的意义?
- 15. 当路径包含以双下划线开头的文件夹时打开文件
- 16. nodeJS中的双下划线与单下划线
- 17. 以#@开头的字符串模式,可以包含下划线和减号
- 18. Elixir中的双下划线函数
- 19. Python方法的双下划线*参数*
- 20. 双下划线在CakePHP的2.0
- 21. 什么是Perl中的双下划线?
- 22. 复杂的双文本下划线
- 23. “双下划线”和“下划线x”有什么区别?
- 24. 为什么一些属性名称在JavaScript中以双下划线开头?
- 25. 解析JSON含下划线
- 26. 替换包含下划线
- 27. NGINX允许带下划线的标头
- 28. 以下划线开头的对象名称
- 29. 搜索以下划线字符开头的文件名
- 30. 检查以下划线开头的属性可以吗?
双下划线:http://stackoverflow.com/questions/224397/why-do-people-use-double-underscore-so-much-in-c(问题是说C++,但'__'是也来自ANSI C标准)。同样在我的'sys/mman.h'版本中,定义了'mmap'。 – birryree
'__mmap'没有被glibc声明。不知道你在说什么。 –
你在看内核头文件,而不是glibc头文件吗? –