Q群:
电话:
邮箱:
地址:
assert()断言,用于在调试过程中捕捉程序的错误。一般格式为assert(expression)
断言函数,用于在调试过程中捕捉程序的错误。
“断言”在语文中的意思是“断定”、“十分肯定地说”,在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。
assert() 会对表达式expression进行检测: 如果expression的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备打印一条错误信息,并调用 abort() 函数终止程序的执行。 如果expression的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。
要打印的错误信息的格式和内容没有统一的规定,这和标准库的具体实现有关(也可以说和编译器有关),但是错误信息至少应该包含以下几个方面的信息:
OneOS提供了以下两种断言方式:
标准格式断言,定义如下:
#define OS_ASSERT(condition) \
do \
{ \
if (!(condition)) \
{ \
os_kprintf("Assert failed. Condition(%s). [%s][%d]\r\n", #condition, __FUNCTION__, __LINE__); \
while(1) \
{ \
; \
} \
} \
} while (0)
当断言中的条件为假时,会打印出错的函数名、行号以及断言的内容,然后进入死循环。
带提示信息的断言主要用来判断与设计预期是否相符,并且可以添加自己的提示信息,定义如下:
#define OS_ASSERT_EX(condition, fmt, ...) \
do \
{ \
if (!(condition)) \
{ \
os_kprintf("Assert failed. " fmt " [%s][%d]\r\n", ##__VA_ARGS__, __FUNCTION__, __LINE__); \
while (1) \
{ \
; \
} \
} \
} while (0)
当断言中的条件为假时,会打印出错的错误提示信息、函数名、行号以及断言的内容,然后进入死循环。