2013-12-14 81 views
-1

我的小程序由幾個「模塊」 - 翻譯單元組成。有些實體是extern,但其他實體是static用C語言聲明本地函數的方式

對於外部實體,我總是放一個前綴。內部的可以通過前面的static來判斷。不過,我要尋找的命名約定清楚地傳達了實體

  • 文件具體,從看不見外面
  • 可以在不改變API-S
  • 的風險被安全地改變如果前面沒有靜態的話,這是一個錯誤。

Python程序員使用領先的下劃線。 C程序員做什麼?

+4

一個有爭議的聲明,@ P0W。在任何情況下,不要使用前導下劃線:它們是保留的(尤其是編譯器)。 – Kninnug

+0

您可以像Go一樣執行操作:用大寫字母開始「導出」函數名稱,用小寫字母開始靜態函數名稱。 –

+1

Python的使用方式是使用前導下劃線的* convention *,在c中,如果使用'static',則編譯器將對該符號的訪問限制到當前的翻譯單元。你可以使用任何你喜歡的約定,事實上,一個領先的下劃線對我來說非常直觀。 – dkrikun

回答

1

許多事情,但避免領先的下劃線,因爲這是在幾個環境中的魔術。

+1

我認爲一個下劃線是好的,兩個是有問題的? – djechlin

+0

在使用盡可能多的操作系統和編譯器之後,我只需避免前導和尾隨下劃線。無論我在做什麼本地「最佳實踐」,我都會努力避免使用任何變量或函數名稱中的簡單單詞,如果您將相同的代碼移動到不同的環境中,則永遠不會知道#define會咬你的東西。某些類型的前綴在這裏有幫助。 – Gilbert

1

static聲明表達了您所問的內容。當然,它錯過了這個要求:

如果前面沒有靜態,這是一個錯誤。

但我會認爲這是一個愚蠢的要求。你說你在Python中使用_,從構建一個文件的安全性角度來看(在C語言中,「編譯一個翻譯單元」)是嚴格低劣的。如果你忽略它,Python在運行時纔會注意到,行爲不會改變。也許你需要Python中的另一個要求來提醒讀者可能會丟失___怎麼樣?但是如果缺失呢?等等。如果你的程序沒有終止,它應該怎麼辦?你不能寫一個"does it stop"檢查。

無論如何,根據我的經驗,C開發人員實際上並不擔心這一點。如果它能幫助你閱讀,那麼制定你自己的觀點並堅持下去並不是不合理的。可能是s_代表靜態模塊,m_代表模塊,t_代表翻譯單元,等等。我認爲這些類型的前綴是C和C++中特殊變量類型的弱「元規則」,例如,班級成員。

1

我建議不要將static編碼到函數名中。爲什麼?因爲這個名字應該以清晰和簡明的方式傳達這個功能的用途。它的存儲位置以及可訪問的位置通常無關緊要。

請注意,此參數特定於功能上的static。它不適用於變量名稱(我個人使用的k -prefix爲這些)或全局變量(首先應避免的所有方法)上的const

+0

我同意。 「在C中聲明本地函數的習慣方式」是使用'static',而不是爲函數和變量名創建一個並行的命名約定來做同樣的事情。 – chux