在看<assert.h>的实现时,学到了一些宏的深层的属性,记录一下:

  宏不能直接调用库的任何输出函数,而且宏必须可以扩展为一个void类型的表达式。但是它可以通过调用隐藏的

库函数来实现输出,如在<assert.h>的实现中,assert宏就是通过调用 隐藏库函数_Assert来实现的,具体如下:

  #define assert(test)  ((test) ? (void)0  :  _Assert (_FILE_ ":" _STR(_LINE)""#test))

 

  具体的_Assert实现如下

  void _Assert(char *msg)

   {

  fputs(msg,stderr);

  fputs(" --assertion failed\n",stderr);

  abourt();

  }

posted on 2010-03-04 21:47  virHappy  阅读(424)  评论(0编辑  收藏  举报