【问题标题】:what does this define directive syntax mean?这个定义指令语法是什么意思?
【发布时间】:2014-12-05 11:52:26
【问题描述】:

这些指令是代码和工作的一部分。但我不明白他们的语法。我只知道“\”表示代码继续下一行。有谁能够帮助我?为什么有一个“;”。 “ADDPOPUPMENU”是什么意思,为什么要大写?

#define ADDPOPUPMENU(hmenu, string) \
HMENU hSubMenu = CreatePopupMenu(); \
AppendMenu(hmenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, string);
// Add a menu item
#define ADDMENUITEM(hmenu, ID, string) \
AppendMenu(hSubMenu, MF_STRING, ID, string);

【问题讨论】:

  • 这是 line 延续,而不是行。它使整个宏成为一行。
  • ADDPOPUPMENU是宏名,为什么要大写,耸耸肩...
  • 有一个“;”因为定义宏的人希望宏扩展包含“;”。名称“ADDPOPUPMENU”是大写的,因为定义宏的人希望宏名称是大写的。
  • 为什么会有分号?因为 C++ 语句需要分号?无论如何,大写的宏命名是常规的,以便作为宏脱颖而出。
  • 我建议你在一些简单的代码中使用宏,然后通过预处理器运行源代码并查看预处理器的输出。

标签: c++ winapi syntax preprocessor-directive


【解决方案1】:

代码定义了两个单独的宏:

#define ADDPOPUPMENU(hmenu, string) \
HMENU hSubMenu = CreatePopupMenu(); \
AppendMenu(hmenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, string);

// Add a menu item
#define ADDMENUITEM(hmenu, ID, string) \
AppendMenu(hSubMenu, MF_STRING, ID, string);

预处理器#define 语句只是定义文本替换。所以代码如下:

ADDPOPUPMENU(MyMenu, "Name")
ADDMENUITEM(MyMenu, MyID, "Item")

将在编译阶段开始前的预处理阶段替换为以下内容:

HMENU hSubMenu = CreatePopupMenu();
AppendMenu(MyMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "Name");
AppendMenu(hSubMenu, MF_STRING, MyID, "Item");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2012-07-25
    • 2011-11-13
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多