错误的宏定义没有错误

时间:2018-08-28 12:10:27

标签: c++

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

#define MSG_SELECTED_INSPECTION [OF D] 490

这一直存在于项目中,并且可以正常编译。

但是要删除空间

#define MSG_SELECTED_INSPECTION[OF D] 490

出现错误'[':unexpected macro definition

第一行为什么没有错误发出?

3 个答案:

答案 0 :(得分:3)

宏主要是文本替换工具。 #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

答案 1 :(得分:2)

宏是文本替换。

因此,您之前将MSG_SELECTED_INSPECTION替换为[OF D] 490。 看来您以前没有使用过MSG_SELECTED_INSPECTION

答案 2 :(得分:2)

  

第一行为什么没有错误发出?

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

if(GetKeyDown(KeyCode.A) || GetKeyDown(KeyCode.LeftArrow)){

    gun.transform.position = player.position.rotate; // ??? 
 }

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