2015-09-05 31 views

回答

11

不,它們是不同的。

#define A; 

A;是兩個不同的令牌。 A是宏名稱,;是它的定義。所以你可以,如果你真的想,寫:

printf("Hello, world\n")A 

,這將是相當於

printf("Hello, world\n"); 

(但請不要這麼做。)

由於唯一A是指在#ifdef中,你所做的只是測試它是否已被定義,不管如何定義。分號無關緊要,因爲您不使用分號。

正如風格和清晰度的問題,你應該始終有一個宏的名稱及其定義之間的空間:

#define A ; 

這是,如果擴張的第一個標記是(角色尤爲重要。如果它緊跟在宏名稱之後,那麼就有一個類似於函數的宏定義(宏需要參數)。如果宏名稱和(之間有空格,(只是宏擴展的一部分。

說到分號,一個常見的錯誤是包括宏定義不必要分號:

#define THE_ANSWER 42; 

... 

printf("The answer is %d\n", THE_ANSWER); 

由於分號是宏定義的一部分,這將擴展爲:

printf("The answer is %d\n", 42;); 

這是一個語法錯誤。

+0

你有沒有mesn printf(「答案是%d \ n」,42;);'最後一個例子? –

+0

@EnzoFerber:的確如此,謝謝! –

+0

@凱瑟湯普森爲什麼A;將不會被視爲一個整體的宏名稱? – Renjie