#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; }
where;
注释掉它后面的内容(在汇编中)。所以我们会错过一个}
那时。
检查每个反斜杠后没有空格。我经常为此而堕落。
您甚至可能在反斜杠之前需要一个空格。
#define DEBUG_BREAK(a)\
if ((a)) \
{\
__asm \
{ \
int 3;\
} \
}
或者....(由于您在 Windows 上,只需使用 DebugBreak 功能...)
#define DEBUG_BREAK(a) {if ((a)) DebugBreak();}
这很奇怪,但是将 {int 3} 放入括号会有所帮助。并且将宏组合到单行器中不会。所以它应该是关于装配的东西,而不是多线。
将其重写为内联函数:
inline void DEBUG_BREAK(bool b)
{
if (b)
{
__asm int 3
}
}
您可能需要替换__asm int 3
为DebugBreak()
,因为这是执行此操作的官方 MS 功能。
请试试这个
#define DEBUG_BREAK(a)\
if ((a)) \
__asm int 3;