2012-04-05 93 views
1

我對編程相對比較陌生,我正在學習如何在C++中使用wxWidgets(使用Visual Studio 2010)。#define指令有多個替換?

我正在瀏覽wxWidgets頭文件「app.h」,並看到一些我無法理解的#define指令。這裏有一個例子:

#define wxIMPLEMENT_APP(appname)   \ 
    wxIMPLEMENT_WX_THEME_SUPPORT   \ 
    wxIMPLEMENT_APP_NO_THEMES(appname)" 

我已經習慣了看到一個「標識符」和一個「替代」的#define,所以如果這個宏有兩個「標識符」我無法理解(wxIMPLEMENT_APP(appname)wxIMPLEMENT_WX_THEME_SUPPORT)和一個「替代品」(wxIMPLEMENT_APP_NO_THEMES (appname))或一個「標識符」(wxIMPLEMENT_APP(appname))和兩個「替代品」(wxIMPLEMENT_WX_THEME_SUPPORTwxIMPLEMENT_APP_NO_THEMES(appname))。

我如何理解這個宏?

我試過在網上查找和在教科書中搜索「macros」,「預處理器指令」,「文本替換宏」,「#define指令」和類似內容,但找不到任何解釋示例看起來像我在這裏的那個。

+0

建議:儘量保持宏爲最後的手段。 – iammilind 2012-04-05 14:40:57

+0

使用你的命名法,你的宏有一個標識符和一個替換。標識符是'wxIMPLEMENT_APP(appname)',替換爲'wxIMPLEMENT_WX_THEME_SUPPORT wxIMPLEMENT_APP_NO_THEMES(appname)''。 – 2012-04-05 14:51:25

+0

Rob:謝謝你澄清標識符和替換的作用 – 2012-04-05 16:18:16

回答

3

預處理器宏在多行中具有單個替換分割。該行末尾的\允許您在多行文本上編寫單個「邏輯」行。

接下來的所有內容wxIMPLEMENT_APP(appname)將被放置在程序文本中wxIMPLEMENT_APP(appname)模式爲匹配;據推測,這兩個定義將由預處理器進一步處理,因爲它們看起來像是對其他宏定義的引用。

+0

感謝您的幫助;除了回答我的具體問題,幫助我澄清了一些術語。 – 2012-04-05 14:53:04