#define DEBUG_BREAK(a)\\
if ((a)) \\
{\\
__asm int 3;\\
}
I have defined a macro as above, and try to use it
#include \"test_d
The macro
#define DEBUG_BREAK(a)\
if ((a)) \
__asm int 3;
works fine but
#define DEBUG_BREAK(a)\
if ((a)) \
{\
__asm int 3;\
}
doesn't! And I think anyone could guess why!! The new line operator is the problem making guy!
It takes
__asm int 3;\
}
as
__asm int 3; }
where ;
comments out what follows it (in assembly). So we will miss a }
then.
#define DEBUG_BREAK(a)\
if ((a)) \
{\
__asm \
{ \
int 3;\
} \
}
Or.... (since you are on Windows, just use the DebugBreak function...)
#define DEBUG_BREAK(a) {if ((a)) DebugBreak();}
That's weird, but getting {int 3} into brackets helps. And combining macro into singleliner doesn't. So it should be something about assembly, not the multilining.
Please try this
#define DEBUG_BREAK(a)\
if ((a)) \
__asm int 3;
Rewrite it as an inline function:
inline void DEBUG_BREAK(bool b)
{
if (b)
{
__asm int 3
}
}
You may want to replace __asm int 3
with DebugBreak()
, as that is the official MS function to do this.
Check there is no white space after each backslash. I often fall for this.
You might even need a single space before the backslash.