c定义多行宏?
#define DEBUG_BREAK(a)\ if ((a)) \ {\ __asm int 3;\ }
我已经定义了一个宏,并尝试使用它
#include "test_define.h" int main() { DEBUG_BREAK(1 == 1); return 0; }
但是这个样本不会编译。 编译器会抱怨括号没有关闭。 如果我在源文件的末尾添加另一个}
,它会编译。
这个宏有什么问题?
宏
#define DEBUG_BREAK(a)\ if ((a)) \ __asm int 3;
工作正常但是
#define DEBUG_BREAK(a)\ if ((a)) \ {\ __asm int 3;\ }
不! 我想任何人都可以猜到为什么! 新的线路运营商是制造问题的人!
它需要
__asm int 3;\ }
如
__asm int 3; }
哪里;
评论它后面的内容(在汇编中)。 所以我们会错过一个}
。
检查每个反斜杠后没有空格。 我经常为此而堕落。
在反斜杠之前你甚至可能需要一个空格。
#define DEBUG_BREAK(a)\ if ((a)) \ {\ __asm \ { \ int 3;\ } \ }
或者….(因为你在Windows上,只需使用DebugBreak函数……)
#define DEBUG_BREAK(a) {if ((a)) DebugBreak();}
这很奇怪,但将{int 3}放入括号会有所帮助。 并且将宏组合成单线并不是。 所以它应该是关于assembly的东西,而不是多线。
将其重写为内联函数:
inline void DEBUG_BREAK(bool b) { if (b) { __asm int 3 } }
您可能希望用DebugBreak()
替换__asm int 3
,因为这是执行此操作的官方MS函数。
请试试这个
#define DEBUG_BREAK(a)\ if ((a)) \ __asm int 3;