2011-06-28 23 views
1

是否有任何常見的命名約定來區分已分配和未分配的字符串?我正在尋找的是有希望的us/sMaking Wrong Code Look Wrong類似,但我寧願使用一些常見的東西來彌補我自己的。分配/未分配字符串的命名約定

+0

這應該可能在programmers.stackexchange.com上,而不是stackoverflow。 –

+1

Boy oh boy,當變量名稱的選擇不再是編程活動時,Stackoverflow變得非常挑剔。 –

+1

這屬於SO,而不是程序員,特別是因爲它是語言特定的(C)。 –

回答

1

這篇文章中的美國慣例有些用處,但它忽略了一個更大的觀點。關鍵在於變量命名約定只有在防止文檔失誤時纔是有效的。

例如:

#Version 1 

char* sHello = "Hello"; 
printf("%s\n", sHello); 

它獲取最終修改爲

#Version 2 
char* sHello = "Hello"; 
... 100 lines of code ... 
sHello = realloc(sHello, strlen(sHello)+7); 
strcpy(sHello+strlen(sHello), " World"); 
... 100 lines of code ... 
printf("%s\n", sHello); 

當你真正想使一個編碼規範的工作,你不能依賴於某種任意的(是的,它們都是任意的)命名約定。您必須以失敗構建的方式備份該命名約定。在上述情況下,明智地使用關鍵字const本可以做到這一點,但編碼慣例會讓人們感到自滿,因爲它是以某種方式命名的。

這是一遍又一遍的文檔問題,最終代碼內文檔會與代碼不同步,並且您的代碼內命名約定最終會與這些名稱的使用不同步。

現在,如果您想向C添加輸入信息(這實際上就是您所得到的),請通過實際將類型添加到c,typedef的系統來執行此操作。然後建立一個系統,可以驗證該類型是否在需要時未被使用,並且構建失敗。其他任何事情都會花費你太多的事後搜索/維護/清理,而實現的編碼風格的一半甚至比糟糕的編碼風格更糟糕。

+2

與其名稱相反,'typedef'確實*不定義新類型 - 它爲現有類型定義*別名*。在C中定義一個新類型的關鍵字實際上是'struct' - 如果你有'struct foo {int n; } a;'和'struct bar {int n; } b;'那麼編譯器不會讓你分配'a = b;'。 – caf

+0

@caf,你是對的,謝謝你的糾正。 –

+0

好點。在暑假結束後,我會嘗試使用「struct astr {char * s;};/*分配的字符串* /」或類似的東西。 – hlovdal