斷言錯誤訊息

存在一個可以顯示錯誤訊息和斷言的技巧。通常,你會編寫這樣的程式碼

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" 也沒有任何影響,除了編譯器將顯示失敗的整個表示式。