ASSERT
来源:互联网 发布:51单片机循迹小车 编辑:程序博客网 时间:2024/06/06 04:19
下面是一种用户自己定义宏 ASSERT 的方法:
从中我们可以看到,如果定义了 DEBUG,ASSERT 将被扩展为一个 if 语句。if 语句中的
NULL 语句让人感到很奇怪,这是因为要避免 if 不配对,所以它必须要有 else 语句。也许
读者认为在_Assert 调用的闭括号之后需要一个分号,但并不需要。因为用户在使用
ASSERT 时,已经给出了一个分号.
当 ASSERT 失败时,它就使用预处理程序根据宏__FILE__和__LINE__所提供的文件名
和行号参数调用_Assert。
_Assert 在标准错误输出设备 stderr 上打印一条错误消息,然后
中止:
在执行 abort 之前,需要调用 fflush 将所有的缓冲输出写到标准输出设备 stdout 上。
同 样 , 如 果 stdout 和 stderr 都 指 向 同 一 个 设 备 , fflush stdout 仍 然 要 放 在 fflush
stderr 之前,以确保只有在所有的输出都送到 stdout 之后,fprintf 才显示相应的错误信
息。
#ifdef DEBUGvoid _Assert(char* , unsigned); //原型#define ASSERT(f) \if(f) \ NULL; \else \ _Assert(__FILE__ , __LINE__)#else#define ASSERT(f) NULL#endif
从中我们可以看到,如果定义了 DEBUG,ASSERT 将被扩展为一个 if 语句。if 语句中的
NULL 语句让人感到很奇怪,这是因为要避免 if 不配对,所以它必须要有 else 语句。也许
读者认为在_Assert 调用的闭括号之后需要一个分号,但并不需要。因为用户在使用
ASSERT 时,已经给出了一个分号.
当 ASSERT 失败时,它就使用预处理程序根据宏__FILE__和__LINE__所提供的文件名
和行号参数调用_Assert。
_Assert 在标准错误输出设备 stderr 上打印一条错误消息,然后
中止:
void _Assert(char* strFile, unsigned uLine){ fflush(stdout); fprintf(stderr, “\nAssertion failed: %s, line %u\n”,strFile, uLine); fflush(stderr); abort();}
在执行 abort 之前,需要调用 fflush 将所有的缓冲输出写到标准输出设备 stdout 上。
同 样 , 如 果 stdout 和 stderr 都 指 向 同 一 个 设 备 , fflush stdout 仍 然 要 放 在 fflush
stderr 之前,以确保只有在所有的输出都送到 stdout 之后,fprintf 才显示相应的错误信
息。
0 0
- assert
- assert
- assert
- assert
- ASSERT()
- assert
- assert
- ASSERT
- ASSERT
- assert
- assert
- assert
- ASSERT
- assert
- ASSERT
- assert
- assert
- assert()
- php后台处理程序+ajax(jquery)
- 链接—Windows7 64位系统搭建Cocos2d-x-2.2.1最新版以及Android交叉编译环境(详细教程)
- 数据集成与变换
- windows mosquitto.exe闪退
- IOS学习笔记4-NSNotificationCenter消息通信机制介绍(KVO)
- ASSERT
- 【Java】java连接ldap
- IOS7彻底去除状态栏
- 【PyQt实例1】图片的缩放和旋转
- XmlResourceParser类是怎么样解析XML文件的
- 能不能只分配内存空间,不赋初始值呢?
- live555学习之RTSP连接建立以及请求消息处理过程
- shell 获取本地IP地址
- Sqlite 简单使用方法