C的結構體成員變數的命名有必要加前綴嗎?
01-05
如在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 還有前途嗎?