#define DEBUG_BREAK(a)\
if ((a)) \
{\
__asm int 3;\
}
I have defined a macro as above, and try to use it
#include "test_define.h"
int main()
{
DEBUG_BREAK(1 == 1);
return 0;
}
But this sample will not compile. The compiler would complain the parenthesis is not closed. If I add another }
in the end of the source file, it compiles.
What's wrong with this macro?
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.
Check there is no white space after each backslash. I often fall for this.
You might even need a single space before the backslash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With