assert機制介紹:
assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義:
#includevoid assert( int expression );
assert的作用是現計算表示式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort 來終止程式執行。
在除錯結束後,可以通過在包含#include 的語句之前插入 #define ndebug 來禁用assert呼叫,示例**如下:
#include#define ndebug
#include
如果僅僅是想得到乙個「引數無效」的返回值,assert就無能為力了,因為他只會立即終止程式。
而且這樣一次只能測試乙個引數的有效性,從出錯處開始之後的所有assert的白寫了。
assert(thiz !=null);if(thiz ==null)
書中介紹了另一種方式:
定義兩個巨集,乙個用於無返回值的函式,乙個用於有返回值的函式:#define return_if_fail(p) if(!(p)) \
#define return_val_if_fail(p, ret) if(!(p)) \
這樣一來,遇到無效引數時,可以看到乙個警告資訊,同時又不會影響自動測試往下進行。
編寫makefile
vim被我設定成了,自動tab變成4個空格。
所以輸入tab的時候,敲命令讓他使用tab。
:set tabstop=4 設定tab寬度為4個字元
:set shiftwidth=4 設定自動縮排為4個字元
:set expandtab 用space替代tab的輸入
:set noexpandtab 不用space替代tab的輸入
:set num 顯示行號。
exe(空格): darray.o main.o
(tab) cc -o exe darray.o main.o
darray.o : darray.c darray.h
cc -c darray.c
main.o : main.c
cc -c main.c
clean :
rm main.o darray.o exe
記憶體洩漏檢測valgrind工具
valgrind ./exe即可,6到飛起!
留白
系統程式設計師成長計畫005
1.這個變成大寫的函式,就不需要用函式指標來給foreach做引數了。因為他沒有什麼其他變種,不像print那樣,既要print int又要print str。函式指標,或者說 函式,別瞎用!2.書裡的寫法 dlist foreach dlist,str toupper,null 看來還是堅持了 函...
系統程式設計師成長計畫 併發 五
文章出處 作者 李先靜 無鎖 lock free 資料結構 多執行緒併發執行時,雖然有共享資料,如果所有執行緒只是讀取共享資料而不修改它,也是不用加鎖的,比如 段就是共享的 資料 每個執行緒都會讀取,但是不用加鎖。排除所有這些情況,多執行緒之間有共享資料,有的執行緒要修改這些共享資料,有的執行緒要讀...
系統程式設計師成長計畫 併發 五
無鎖 lock free 資料結構 多執行緒併發執行時,雖然有共享資料,如果所有執行緒只是讀取共享資料而不修改它,也是不用加鎖的,比如 段就是共享的 資料 每個執行緒都會讀取,但是不用加鎖。排除所有這些情況,多執行緒之間有共享資料,有的執行緒要修改這些共享資料,有的執行緒要讀取這些共享資料,這才是程...