2012-11-15 63 views
1

我在閱讀有效的C++。當涉及到第2項(更喜歡const,enum和inline到#define)時,Scott說:#define通常被視爲不是該語言的一部分,並且可能會在源代碼到達之前被預處理器刪除編譯器。需要示例:在源代碼到達編譯器之前,#define可能被預處理器刪除

任何人都可以告訴我一個關於這個的例子嗎?謝謝。

+1

給出的例子是怎麼回事? (參考:http://210.212.249.121/ebook/cse/013/EffectiveC++/EC/EI1_FR.HTM) – stuartd

+0

一個例子? '#define'的每個例子都這樣做。所有預處理器指令總是在編譯之前進行評估。 –

回答

1

這是一個有些模糊的語句,但正式的預處理器是一個獨立的編譯階段,早在古時的預處理器是做它的事,編譯器終於看到了代碼之前一個單獨的程序。大多數編譯器只能進行預處理,這對於弄清楚某些代碼已經走向歧途有時很有幫助。但根據「似乎」的規則,編譯器不會必須在一個單獨的階段做預處理;它只需要產生相同的結果,就好像它已經這樣做了。

+0

明白了,謝謝。 – micintosh

0

這裏是一個非常簡單的例子:

#define MAX_COUNT 256 

預處理將其傳遞到編譯器之前與256取代在相關範圍MAX_COUNT每次發生。

從廣義上講,你可以把它看成macroing:

#define FOO(a,b) a*b+a+b 

a*b+a+b

更換FOO(a,b)詳細閱讀有關預處理器,你也可以參考這個page