断言错误消息

存在一个可以显示错误消息和断言的技巧。通常,你会编写这样的代码

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" 也没有任何影响,除了编译器将显示失败的整个表达式。