【问题标题】:#define directive with multiple replacements?#define 指令有多个替换?
【发布时间】:2012-04-05 14:36:39
【问题描述】:

我对编程比较陌生,我正在尝试学习在 C++ 中使用 wxWidgets(使用 Visual Studio 2010)。

我正在查看 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))。

我如何理解这个宏?

我尝试在网上和教科书中查找,在“宏”、“预处理器指令”、“文本替换宏”、“#define 指令”等类似内容下进行搜索,但我找不到任何解释说明的示例看起来像我这里的那个。

【问题讨论】:

  • 建议:尽量保留宏作为最后的手段。
  • 使用你的命名法,你的宏有一个标识符和一个替换。标识符为wxIMPLEMENT_APP(appname),替换为wxIMPLEMENT_WX_THEME_SUPPORT wxIMPLEMENT_APP_NO_THEMES(appname)"
  • Rob:感谢您阐明标识符和替换的作用。

标签: c++ macros c-preprocessor wxwidgets preprocessor-directive


【解决方案1】:

这个预处理器宏有一个替换分割成多行。行尾的\ 让您可以在多行文本上写一个“逻辑”行。

wxIMPLEMENT_APP(appname) 模式匹配时,wxIMPLEMENT_APP(appname) 后面的所有内容都将放在程序的文本中匹配;据推测,这两个定义都将由预处理器进一步处理,因为它们看起来像是对其他宏定义的引用。

【讨论】:

  • 感谢您的帮助;除了回答我的具体问题之外,您还帮助我澄清了一些术语。
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 2023-01-21
  • 2021-12-30
  • 2014-07-12
  • 2018-12-18
  • 1970-01-01
相关资源
最近更新 更多