2012-10-09 34 views
2

我知道函數默認用C標記extern並且,也可以在C使用extern變量(如果在一些其他的文件初始化或如果我寫extern int foo = 1;)。但是,我可以使用extern作爲C宏,因爲它們的功能類似於?我可以使用extern宏嗎?

+1

請詢問之前,研究問題的有效性。 –

+0

@SeanVaughn:這個問題確實是預測一個誤會,但一個非常可以理解的一個我想。 –

+1

你不能合法地寫'extern int foo = 1;'。你可以寫任何'INT富= 1;'或'的extern INT FOO;',但你不能說「定義別處」('extern'),並給出一個初始化過。 –

回答

8

除非東西在C99從根本上改變,預處理宏沒有存儲類。沒有同時定義它們,你就不能聲明它們。他們甚至不通過同樣的方式,其它標識符是處理編譯器處理過的 - 他們是一個純粹的文本翻譯(至少在概念上)發生時,編譯器會嘗試任何類型的名稱查找,甚至之前。

+3

與具有存儲類的宏相關的C99或C2011中沒有任何更改。 –

相關問題