断言错误消息
存在一个可以显示错误消息和断言的技巧。通常,你会编写这样的代码
void f(void *p)
{
assert(p != NULL);
/* more code */
}
如果断言失败,则错误消息类似
断言失败:p != NULL,文件 main.c,第 5 行
但是,你也可以使用逻辑 AND(&&
)来提供错误消息
void f(void *p)
{
assert(p != NULL && "function f: p cannot be NULL");
/* more code */
}
现在,如果断言失败,则会显示错误消息
断言失败:p != NULL &&“函数 f:p 不能为 NULL”,文件 main.c,第 5 行
为什么这有效的原因是字符串文字总是计算为非零(true)。将 && 1
添加到布尔表达式无效。因此,添加 && "error message"
也没有任何影响,除了编译器将显示失败的整个表达式。