SiPESC平台使用自己的断言宏来替代系统和Qt提供的断言宏,除了基本的判断指定条件是否成立外,SiPESC断言还在条件判断失败时显示当时的运行环境,包括开发人员制定的环境描述信息以及运行堆栈信息等。
SiPESC平台的断言系统包括以下几个宏:
- M_ASSERT_PUSH(state, category)
向SiPESC断言系统压入一个状态。这个状态由状态变量state和状态描述信息category组成,其中状态变量state由编程人员指定并保证不会与程序中其他标识符冲突,同时还保存了当前所在源码文件及行号。
- M_ASSERT_POP(state)
从SiPESC断言系统中弹出最近压入的状态。其中参数state必须是与前面压入时指定的状态变量保持一致。
- M_ASSERT(condition, description)
判断指定的条件表达式condition是否成立,如果成立则继续当前代码的执行,否则如果在此之前已经在SiPESC断言系统中压入了状态,则直接跳转到对应的M_ASSERT_POP位置并报告description描述的信息以及压入的状态和运行堆栈信息等,如果断言系统为空则按普通异常处理。
这三个宏中,M_ASSERT可以任意使用,可以取代assert和Q_ASSERT。而M_ASSERT_PUSH和M_ASSERT_POP必须在一个函数中成对使用。下面是一个简单的例子:
void anotherFunc()
{
M_ASSERT(1, "This will succeed");
M_ASSERT(0, "This will fail and return directly to M_ASSERT_POP");
printf("This line will never be reached!\n");
}
bool testFunc()
{
M_ASSERT_PUSH(success, "testFunc");
anotherFunc();
M_ASSERT_POP(success);
return success;
}