什么是 (__ASSERT_VOID_CAST (0))?

4 c macros

从 C 中的 assert.h 文件:

#define assert(expr)        (__ASSERT_VOID_CAST (0))
Run Code Online (Sandbox Code Playgroud)

我想知道什么是 (__ASSERT_VOID_CAST (0))?我试图找到它的实现,但找不到任何地方。

Hen*_*man 5

好吧,__ASSERT_VOID_CAST在某处将是另一个宏,当断言被“关闭”时,它将扩展为与

((void) 0)
Run Code Online (Sandbox Code Playgroud)

这是一种获得void表达式的方法。在较旧的实现中,assert()只是扩展为空字符串,但 void 表达式将允许您使用逗号运算符将其转换为表达式,例如:

while(assert(n > 0), k/n > 10) { ... }
Run Code Online (Sandbox Code Playgroud)

  • 一个简单的“0;”在用作语句时给出“警告:没有效果的语句”。所以它可能适用于 `while` 片段,它不适用于更常见的 `assert()` 作为语句。 (3认同)
  • @Thomas - 是的。但请记住,`assert()` 宏被定义为一个空表达式。因此,将其扩展为简单的“0”是不正确的。 (2认同)