关闭

教你写一个C的assert宏

451人阅读 评论(0) 收藏 举报
在C中 , 相信assert这个断言是用的最频繁的宏之一,特别是在我们找BUG的时候,多用一些断言可以让我们更靠近出错的代码,不多说,进入我们的主题,写出一个assert宏来。

  首先我们都知道,assert在debug版下是有效的,在release版中assert是无效的,那么我们应该如何实现这一功能呢?实际上在release的版本中系统定义了NDBUG这个宏常量,当然在debug中没有定义这个宏常量,所以在定义这个宏之前检查是否定义过NDBUG这个宏就可以知道是debug版还是release版了,见下面的代码:

#if !defined(NDBUG)
  #define assert(p)        /*这里写上宏的代码*/    
  #else
  #define assert(p) 
  #endif


 

现在我们继续实现的assert , 我们都知道断言要是失败了,要输出失败位置所在文件的文件名 , 和行号 , 当然输出应该重定向到标准出错里面。

 

__FILE__记录了当前执行的文件名。

__LINE__记录当前执行的行号。

stderr是标准出错。

当然断言要是失败的话 , 调用abort终止程序的执行 , 代码实现如下。

 

#if !defined(NDBUG)
  #define assert(p)    if(!(p)){fprintf(stderr,\
         "Assertion failed: %s, file %s, line %d\n",\
         #p, __FILE__, __LINE__);abort();}     
  #else
  #define assert(p) 
  #endif


 

好了一个C的assert宏就完成了。

 

转自:http://www.cnblogs.com/kanong/archive/2010/09/11/1824002.html

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:113872次
    • 积分:1572
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:91篇
    • 译文:0篇
    • 评论:9条
    最新评论