新闻  |   论坛  |   博客  |   在线研讨会
关于assert()函数
jobs | 2012-06-30 20:26:48    阅读:1992   发布文章

关于assert()函数
有部分书籍将其翻译成为断言,其在程序编写起着重要作用。主要为了辅助程序员编写调试程序,为调试提供出错信息指示。下面简单说一下其在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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客