對基於C的代碼庫/ API的一部分的文件和函數進行命名的正確方法是什麼?C庫代碼的正確命名約定
回答
什麼你可以(但不應該)做的是完全不小心,沒有使用任何系統的命名約定的。這個'有效',但會讓你的顧客感到不舒服;他們沒有簡單的方法知道他們可以在自己的程序中使用哪些名稱。 (我遇到一個庫,它定義了一個名爲error()
的內部使用的未公開函數,名稱與外部文檔名稱空間的任何部分都不匹配,當時我自己的一個標準錯誤報告函數也被稱爲error()
- 雖然現在是err_error()
;這意味着我無法使用自己的標準錯誤報告功能與該庫。結果是我沒有使用該庫,如果我不必這樣做;這太麻煩了使用。)
所以,你不應該那樣。你應該小心你公開的名字。
你的公共頭文件應該使用一個(或者很少的)系統前綴,這些前綴被記錄在案。通常情況下,您會選擇一個前綴,如PFX,並使用該前綴:
- 枚舉常量開始
PFX_
。 - 宏開始
PFX_
。 - 函數開始
pfx_
。 - 全局變量(你沒有任何這些,你)開始
pfx_
。 - 類型名稱和結構或聯合標記開始
pfx_
。 - 他們自己的源文件以外可見你的私有變量和函數有一個系統的前綴(可能
pfx_
再次,也許pfxp_
其中最後p
是私有的,或者是pfx[A-Z]
使民營名稱是駱駝,套管,但開始pfx
)。
只有嚴格文件範圍(無外部鏈接)的變量或函數不受這些規則的限制,但即使如此,建議使用命名約定(所以如果函數需要使用兩個文件稍後,您不必修改功能之前的代碼中的調用static
)。
通過這種方式,您可以簡單地記錄從您的庫中保留的名稱PFX_
或pfx_
。用戶仍然可以使用具有相同前綴的名稱(不能阻止它們),但他們自己承擔風險,因爲升級到庫可能會添加保留的名稱。他們可以很好地清楚你的名字,因爲你已經記錄了他們,並且因爲文檔相對容易理解。
請注意,C標準和POSIX標準都規定了保留名稱的規則。但是,保留的POSIX和C名稱的規則比單個前綴複雜得多。他們也在掃地。例如,如果包含任何POSIX頭文件,POSIX保留所有以_t
結尾的名稱作爲類型名稱。
謝謝你。所以幾乎可以替代objc標準,例如objc中的ASIWebPageRequest方法可以是c中的asi_web_page_request方法。 – user773578 2012-04-04 23:17:04
@ user773578 ASIWebPageRequest不是一種方法,而是一個類。 – 2012-04-04 23:19:20
沿着這些總體路線,是的。經典的(查看C標準)函數名稱是小寫的。宏往往是大寫的。類型主要是小寫等。最重要的事情是定義一組規則,然後一致地應用它們。甚至在使用'nm'標識目標文件中定義的符號並確保符合您的規則的情況下。人們通常不會那麼做,但是如果沒有一致的規則來使用圖書館會更困難。 – 2012-04-04 23:19:47
- 1. C/C++代碼的編碼和命名約定的測試
- 2. 在Django中正確的命名約定
- 3. c#命名約定
- 4. C#:嵌套類的命名約定和正確的實現?
- 5. Visual C++調試庫命名約定
- 6. 數據庫命名約定
- 7. 什麼是MSVC的DLL,靜態庫和導入庫正確的命名約定
- 8. C#WinForms命名約定
- 9. 在C#命名約定
- 10. C#項目命名約定
- 11. 驗證命名約定? C#
- 12. C#類命名約定
- 13. C/C++:數組的命名約定?
- 14. 替代多對多關係的代碼優先命名約定
- 15. 命名約定
- 16. 命名約定
- 17. 什麼是正確的Java命名約定的ID?
- 18. C#命名約定(標題與名稱)
- 19. Microsoft的數據庫命名約定?
- 20. Racket布爾參數的正確命名約定是什麼?
- 21. 命名約定:退出狀態,退出代碼或返回碼?
- 22. C#轉換函數的命名約定
- 23. C#中windows控件的命名約定
- 24. C++中的變量命名約定
- 25. 數字函數的C命名約定?
- 26. c風格命名約定的要點
- 27. 關於C++命名約定的問題
- 28. C#中的命名約定是什麼?
- 29. C#縮寫詞的命名約定
- 30. .NET/C#/ WPF項目的命名約定
那麼,在C你沒有方法,所以有一件事情需要擔心。開玩笑。只要看看一些開源的C庫,然後挑選你最喜歡的那個。關於風格,要保持一致性比糾正錯誤要好得多(如果有關於編碼風格的話)。 – C2H5OH 2012-04-04 23:04:37
文件名必須遵循文件系統的規則。 C函數名稱必須以非數字字符開頭,並且僅由構成有效標識符的字符組成。 – 2012-04-04 23:08:15
您實質上是在尋求編碼標準的建議。這真是一個品味問題。無論如何,這是http://stackoverflow.com/a/1262992/445525 – 2012-04-04 23:08:38