2008年9月17日 星期三

assert 的用法

可用來除錯。

用法很簡單。沒有回傳值,只要 assert() 括號內的值是 false 就直接結束程式,並印出是哪一行、什麼情況下跳出的。

使用前需 include assert.h。

以底下的程式為例:

#include <stdio.h>
#include <assert.h>

int main(){

    int big = 10, small = 5;
    assert(big > small);
    printf("Program end.\n");
    return 0;
}

執行後會印出 Program end. 的字。

如果把 small 的值改為 15,重新 compile 再執行,則會印出

a.out: test_assert.c:7: main: Assertion `big > small' failed.
Aborted

可以看出,會印出的訊息包括

  1. a.out: 執行檔名
  2. test_assert.c: 代表是哪個 .c 檔
  3. 7: assert 所在的行號
  4. big > small: false 的判斷式

另外,如果程式要 release 了,總不希望客戶拿到手,莫明奇妙程式突然就結束,還順便印出 xxx failed 的字。此時,可以在 compile 時 define NDEBUG ,assert 就會無作用,直接跳過。

以上述的程式為例,small 仍然維持 15 的值,但 compile 時改為

gcc -DNDEBUG test_assert.c

執行程式,會發現此時是出現 Program end. ,assert 這行完全被跳掉了。

沒有留言: