从 C 中的 assert.h 文件:
#define assert(expr) (__ASSERT_VOID_CAST (0))
Run Code Online (Sandbox Code Playgroud)
我想知道什么是 (__ASSERT_VOID_CAST (0))?我试图找到它的实现,但找不到任何地方。
好吧,__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)