可用來除錯。
用法很簡單。沒有回傳值,只要 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
可以看出,會印出的訊息包括
- a.out: 執行檔名
- test_assert.c: 代表是哪個 .c 檔
- 7: assert 所在的行號
- big > small: false 的判斷式
另外,如果程式要 release 了,總不希望客戶拿到手,莫明奇妙程式突然就結束,還順便印出 xxx failed 的字。此時,可以在 compile 時 define NDEBUG ,assert 就會無作用,直接跳過。
以上述的程式為例,small 仍然維持 15 的值,但 compile 時改為
gcc -DNDEBUG test_assert.c
執行程式,會發現此時是出現 Program end. ,assert 這行完全被跳掉了。
沒有留言:
張貼留言