2012-07-24 48 views
3

我發現了幾個不同風格的宏。
頭文件是這樣的:宏是否有任何默認或推薦樣式?

#define __HEADER_H__ 
#define _HEADER_H_ 
#define _header_h 

簡單的宏:

#define SOMEMACRO something 
#define somemacro something 
#define SOME_MACRO something 

宏與參數:

#define func_macro() something() // arguments not used? 
#define FUNC_MACRO something() 
#define func_macro something() 

所以我的問題是:他們中的一些好或不好的風格?宏名稱是否有「默認」樣式?

+1

我的編碼風格:不要使用它們。 – 2012-07-24 21:01:52

+6

絕對**不要**使用'__'或'_H'。兩者都保留用於實施。更一般地說,標識符以兩個下劃線或下劃線開頭,後跟一個大寫字母。 – chris 2012-07-24 21:04:05

+1

資本化通常是一個好主意,尤其是如果你想警告開發者它做了一些不尋常的事情。 – 2012-07-24 21:05:03

回答

2

根據Indian Hill C style guide, as amended at UofT, UW, and elsewhere

11.命名約定(第13頁):

的#define常量應全部大寫。

...

許多宏``功能 '' 是全部大寫。一些宏(比如getchar和putchar)是小寫的,因爲它們也可能作爲函數存在。如果宏的行爲類似於函數調用,那麼只有小寫宏名稱是可接受的,也就是說,它們只精確評估其參數一次,並且不將值指定給命名參數。有時候,即使參數只計算一次,編寫一個宏函數也是不可能的。

另請閱讀pdf文檔第14頁的第12章(常量)和第13章(宏)。


他們的命名約定是恕我直言,非常合理。

3

使用全部大寫字母絕對是常量的選擇。不過,我建議不要使用函數宏。我建議編寫內聯函數。在某些情況下使用的函數宏可能會導致邏輯錯誤。例如:

#define FUNC(x) x + x 

int main() { 
    int a = 1; 
    b = FUNC(a++); 
} 

結果未定義,很可能不是預期的結果。

+1

你甚至不能指望三個。這一個是未定義的行爲。 – aschepler 2012-07-24 21:13:38

+0

是的,你是對的。我的錯。 – Nino 2012-07-24 21:17:46

相關問題