2011-03-09 75 views
4

我發現自己有很多函數都是c中的oo風格(沒有任何花哨的宏或函數指針只是將結構類型作爲第一個參數的struct +函數) my_func_my_type很好如果我使用那個,我應該儘量保持一致性?如果我的一個功能名稱變成> 20個字符?> 25?我應該保持樣式一致嗎?很好的OO命名方案c

另外什麼是好的命名方案的構造函數/初始化/析構函數? 是否有什麼,然後new_my_type,init_my_type,free_my_type?

PS是否有這個/ self ptr或我應該將OO的第一個參數命名爲像函數那樣的函數(to_init,some_guy等)。

回答

3

我個人會使用一個與大多數C庫一致的方案,它將庫名稱作爲前綴功能。這會給例如void MyObject_MyFunction。對於施工/銷燬,您可以保持一致並使用MyObject_Construct,MyObject_Destroy。只要你保持一致,我會說這個名字並不重要。

1

'好'有點主觀,但我覺得最簡單的方法是選擇一個特定的方案(將結構名稱併入方法)並嚴格遵守。真的很長的函數名稱雖然我傾向於避免,但如果函數太複雜以至於需要如此長的名稱,那麼可能需要重構它,分解成子函數等。 我也不使用下劃線,但這是一個品味問題。 的怎麼在這裏使用的示例:

typedef struct Discriminator 
{ 
    //members 
} Discriminator; 

DiscriminatorConstruct(Discriminator* p); 
DiscriminatorDestruct(Discriminator* p); 
DiscriminatorFunctionA(Discriminator* p, int arg1, int arg2); 
1

由於缺乏一個與c世界中的,C++提供了其功能的命名一個有用的先例:

[[namespace::...]struct::]function 

沒有什麼像在C命名空間,但您可以將它們想象並建模爲相關結構共享的前綴。爲了便於閱讀,它有助於讓某些東西在視覺上區分不同的命名組件。如果你喜歡在你的函數中使用下劃線,你可以考慮兩個下劃線作爲分隔符,否則可能只有一個。 (從技術上講,可以爲實現保留兩個下劃線,但我從來沒有見過任何沒有以下劃線作爲前綴的實現標識符在內部放置雙下劃線)。

保持名稱接近C++也有助於程序員跨越兩種語言,並在必要時來回移動代碼。同樣,C++的術語,可以採用:構造析構函數,可能刪除(不過,如果C代碼移植到C++,但繼續使用免費/ malloc的這些名字可能變得用詞不當)。

恕我直言,一貫的,明確的命名節省更多的麻煩比長標識符造成的,但如果事情變成一種痛苦,然後尋求一個本地化解決方法,如宏,內聯包裝函數,函數指針等等。

+0

如果你只推薦C++這個答案是不完整的。 **的Objective-C ** ??! – 2011-03-09 10:54:40

+0

@Radek:隨意評論或張貼您自己的答覆與任何先例Objective-C集 - 我從來沒有使用過或看過它...... – 2011-03-09 10:57:09

+0

哦,這是一個完整的故事,但Objective-C幾乎是這些天使用。 – 2011-03-09 10:58:34