在標準庫(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頭文件嗎? –