定义宏错误:在asm'之前的预期主要异常。

时间:2014-12-30 20:48:44

标签: c++ debugging assembly macros breakpoints

这段代码应该提供一个断言函数,仅用于调试,如果断言失败(不是完整代码),它会自动创建一个断点:

#define DebugInt3 asm __volatile__ (".byte 0x90CC")
#define DEBUG_ASSERT(expr) ((expr)? ((void)0): (DebugInt3))

但是,我收到了这些错误:

error: expected primary-expression before 'asm'
error: expected ')' before 'asm'
error: expected ')' before ';' token

我觉得令人困惑的是,“asm volatile (”。byte 0x90CC“)”如果我直接把它放在main函数中就有效。 Stackoverflow删除双下划线以使单词变为粗体。我做错了什么?

解决方案和示例,谢谢Richard Pennington:

#include <iostream>
#include <cassert>

#ifdef DEBUG
// 0xCC - int 3 - breakpoint
// 0x90 - nop?
#define DebugInt3 asm __volatile__ (".byte 0x90CC")
#define DEBUG_ASSERT(expr) do { if (!(expr)) DebugInt3; } while(false)
#endif

using namespace std;

int main()
{
    #ifdef DEBUG
        DEBUG_ASSERT(false);
    //    assert(false);
    #endif // DEBUG

    return 0;
}

1 个答案:

答案 0 :(得分:3)

您尝试将语句用作表达式。尝试像

这样的东西
#define DEBUG_ASSERT(expr) do { if (!(expr)) DebugInt3; } while(0)