有部分书籍将其翻译成为断言,其在程序编写起着重要作用。主要为了辅助程序员编写调试程序,为调试提供出错信息指示。下面简单说一下其在stellaris固件库里的应用。
StellarisWare中ASSERT的定义如下:
#ifdef DEBUG
#define ASSERT(expr) { \
if(!(expr)) \
{ \
__error__(__FILE__, __LINE__); \
} \
}
#else
#define ASSERT(expr)
#endif
__error__(__FILE__, __LINE__)函数;传递文件名称和ASSERT宏调用的行编号。如果断言出错了会有相应的错误信息的文件名和行编号显示在console中
但是我也可以将其更改,如果出错则会打印到监视窗口,示例如下:
#ifdef DEBUG
#define ASSERT(expr) { \
if(!(expr)) \
{ \
printf("\n\r ASSERT: File[%s],Line[%d],Func[%s].\n\r", \
__FILE__,__LINE__,__FUNCTION__);\
} \
}
#else
#define ASSERT(expr)
#endif
当然,我们在使用assert()函数前一定要预定义DEBUG
或者 #define DEBUG
IAR编译器自带的assert.h文件也支持,其会将错误信息打印到 terminal I/O窗口上。
i = 0;
assert(!(i == 0)); //此处检验除数是否为零,是零则报错,并终止程序
i = 100 / i;
程序运行到此处后打印出来的错误信息。
参考:http://www.deyisupport.com.sixxs.org/question_answer/f/57/t/6314.aspx
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。