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