C的結構體成員變數的命名有必要加前綴嗎?

如在Linux中,struct stat的成員變數st_mode,struct tm的成員變數tm_year。不解的是,Linux中連create都要寫成creat,state要寫成stat,為什麼卻要加上這些多餘的前綴?mode,year多清爽啊。


現在BSD代碼中仍然大量存在這種前綴。我在實際寫代碼中也會習慣性的加這種前綴,主要原因有兩個,一是現在的交叉索引工具不夠智能,加前綴基本能保證結構成員名字的唯一性,這樣cscope能直接跳轉的定義也能反向查找引用,沒有前綴導致大量重名的時候,這種交叉引用工具基本上就廢了;第二個原因相似,方便grep,簡單的工具通常意味著可靠,有時候想大概看看引用情況,grep一個特別一點的名字就基本明了。


某大師多次強調,程序先是給人看的,然後是給機器執行的。


POSIX標準就是這樣的,我只是好奇當初為什麼這樣規定,搞的現在到處都這麼用,

雖然我是無所謂 ╮(╯3╰)╭。

--------------------------補充----------------------------------

creat之類的缺e現象還真是湯普遜的原因,當然儘可能減少字母(省略e)是當時流行一種的趨勢,雖然現在已被摒棄,但這裡居然被延續下來了。。。

Yes, this function』s name is missing an e. Ken Thompson, the creator of Unix, once joked that the missing letter was his largest regret in the design of Unix.

參考:POSIX.pdf - 下載詳情


估計是為了在使用結構體變數的成員的時候,讓代碼閱讀者知道這個結構體成員變數是XXX類型結構體的。


https://zh.wikipedia.org/wiki/匈牙利命名法

  • 從名字中就可以看出變數的類型
  • 擁有類似語義的多個變數可以在一個代碼塊中使用:dwWidth,iWidth,fWidth,dWidth
  • 變數名在僅僅知道他們的類型時可以被輕易記住
  • 可以使變數名更加一致
  • 決定一個變數名的時候可以更機械化,更快
  • 不合適的類型轉換和操作可以在閱讀代碼的時候被檢測出來
  • 在那些數字被當作字元串處理的基於字元串的語言中非常有用(例如Tcl)
  • 在匈牙利應用命名法中,變數名確保不會犯以下錯誤:

heightWindow = window.getWidth()

  • 在使用動態類型語言或完全無類型的語言編程時,關於類型的修飾可以更簡化。這種語言一般不包含類型修飾(或者可選),因此唯一可以看出哪些類型是被允許的只有名字本身、文檔以及通過閱讀代碼來明白它們在做什麼。在這些語言中,包含對於變數類型的指示可能會有助於程序員。就像上面提到的,匈牙利命名法擴展了這樣的語言(BCPL)。
  • 在包含許多全局對象的複雜程序中(VB/Delphi Forms),擁有一個基本的前綴命名法可以簡化在編輯器中查找組件的工作。按btn&可以使編輯器彈出一個Button對象的列表


推薦閱讀:

dos與unix區別?
為什麼好多人說大牛都玩Unix/Linux?
為什麼 Python(或 Ruby、Perl 等)沒有取代 Bash 成為系統 Shell?
Unix和Linux操作系統有什麼區別?
FreeBSD 還有前途嗎?

TAG:編程語言 | 編程 | Linux | C編程語言 | Unix |