2012-04-04 69 views
4

對基於C的代碼庫/ API的一部分的文件和函數進行命名的正確方法是什麼?C庫代碼的正確命名約定

+1

那麼,在C你沒有方法,所以有一件事情需要擔心。開玩笑。只要看看一些開源的C庫,然後挑選你最喜歡的那個。關於風格,要保持一致性比糾正錯誤要好得多(如果有關於編碼風格的話)。 – C2H5OH 2012-04-04 23:04:37

+0

文件名必須遵循文件系統的規則。 C函數名稱必須以非數字字符開頭,並且僅由構成有效標識符的字符組成。 – 2012-04-04 23:08:15

+1

您實質上是在尋求編碼標準的建議。這真是一個品味問題。無論如何,這是http://stackoverflow.com/a/1262992/445525 – 2012-04-04 23:08:38

回答

6

什麼你可以(但不應該)做的是完全不小心,沒有使用任何系統的命名約定的。這個'有效',但會讓你的顧客感到不舒服;他們沒有簡單的方法知道他們可以在自己的程序中使用哪些名稱。 (我遇到一個庫,它定義了一個名爲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結尾的名稱作爲類型名稱。

+0

謝謝你。所以幾乎可以替代objc標準,例如objc中的ASIWebPageRequest方法可以是c中的asi_web_page_request方法。 – user773578 2012-04-04 23:17:04

+0

@ user773578 ASIWebPageRequest不是一種方法,而是一個類。 – 2012-04-04 23:19:20

+0

沿着這些總體路線,是的。經典的(查看C標準)函數名稱是小寫的。宏往往是大寫的。類型主要是小寫等。最重要的事情是定義一組規則,然後一致地應用它們。甚至在使用'nm'標識目標文件中定義的符號並確保符合您的規則的情況下。人們通常不會那麼做,但是如果沒有一致的規則來使用圖書館會更困難。 – 2012-04-04 23:19:47