代码之家  ›  专栏  ›  技术社区  ›  Serve Laurijssen

不正确的宏定义没有错误

c++
  •  0
  • Serve Laurijssen  · 技术社区  · 6 年前

    当用constexpr auto替换宏时,我遇到了以下宏

    #define MSG_SELECTED_INSPECTION [OF D] 490
    

    这一直在项目中,它编译得很好。

    但是,将空间移除

    #define MSG_SELECTED_INSPECTION[OF D] 490
    

    发出错误 '[':unexpected macro definition

    为什么第一行没有错误?

    3 回复  |  直到 6 年前
        1
  •  3
  •   user743382    6 年前

    宏主要是一种文本替换工具。 #define MSG_SELECTED_INSPECTION [OF D] 490 是完全有效的宏定义。无论何时 MSG_SELECTED_INSPECTION 可见,将被替换为 [OF D] 490 .

    原因 #define MSG_SELECTED_INSPECTION[OF D] 490 是因为定义必须至少用空格与宏名分隔。这是因为并非所有编译器都允许标识符中使用相同的字符集,如果

    #define A$B C
    

    将定义宏 A 随着扩展到 $B C 一个实现,一个宏 A$B 随着扩展到 C 在另一个方面。

        2
  •  2
  •   Jarod42    6 年前

    宏是文本替换。

    所以之前,你要替换 MSG_SELECTED_INSPECTION 通过 [OF D] 490 . 你好像没用 msg_selected_检验 以前。

        3
  •  2
  •   StoryTeller - Unslander Monica    6 年前

    为什么第一行没有错误?

    宏有两种形式,函数型和对象型(您所拥有的)。

    #define CONST ...
    #define FUNC(...) ...
    

    A space is required 作为宏和标记序列之间的分隔符,它被定义为替换。删除空间后,它不再是有效的(类似对象)宏定义。