gpt4 book ai didi

c - 为什么 `_wassert` 包裹在 `(..,0)` 中?

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:19 24 4
gpt4 key购买 nike

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

    #define assert(expression) (void)(                                                       \
(!!(expression)) || \
(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
)

最佳答案

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

  1. 打印断言失败。
  2. 调用abort(或exit 或类似的函数来结束执行)。

因此它不会返回并被声明为一个 void 函数(正如 T.C. 在评论中提到的)。 (它必须声明为 void,否则编译器会提示它没有返回值)。

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

关于c - 为什么 `_wassert` 包裹在 `(..,0)` 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com