这段代码应该提供一个断言函数,仅用于调试,如果断言失败(不是完整代码),它会自动创建一个断点:
#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;
}
答案 0 :(得分:3)
您尝试将语句用作表达式。尝试像
这样的东西#define DEBUG_ASSERT(expr) do { if (!(expr)) DebugInt3; } while(0)