#define assert(_Expression)(void)((!!(_ Expression))||(_wassert(_CRT_WIDE(#_ Expression),_ CRT_WIDE(__ FILE__),_ _ _ _ _ _ _,_)))

时间:2015-11-12 02:04:27

标签: c++ c

我想知道为什么_wassert函数包含在(..,0)

_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__) ,0)

1 个答案:

答案 0 :(得分:0)

断言失败时调用_wassert函数。这将:

  1. 打印断言失败。
  2. 调用abort(或exit或某些此类函数以结束执行。)
  3. 因此它不会返回并被宣布为无效函数(如T.C.在评论中所述)。 (必须声明无效,否则编译器会抱怨它没有返回值)。

    然后当它在表达式test || _wassert(...)中使用时,编译器会抱怨,因为它不会进行类型检查。 ||需要两种数字类型。所以解决方案是让右手表达式返回一个int(即使它永远不会因abort而返回),为此他们使用逗号运算符。