我无法评论答案本身,所以:关于使用逗号来防止需要括号对
#define MY_ASSERT(expr) ((expr) || (debugbreak(), 0))
Run Code Online (Sandbox Code Playgroud)
这里debugbreak()返回void,但我们仍然希望将0作为右值.
(debugbreak(),0)如何返回0?我知道debugbreak()的返回值被丢弃并且返回0,但是debugbreak会生成异常,那么以后如何评估任何内容呢?我想我的问题可以推广到任何类似的二元运算符,其中被评估的第一部分退出程序.