系統程式設計師成長計畫006第二章又快又好拾遺

2022-09-14 04:21:09 字數 1289 閱讀 5829

assert機制介紹:

assert巨集的原型定義在中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義:

#include 

void 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 資料結構 多執行緒併發執行時,雖然有共享資料,如果所有執行緒只是讀取共享資料而不修改它,也是不用加鎖的,比如 段就是共享的 資料 每個執行緒都會讀取,但是不用加鎖。排除所有這些情況,多執行緒之間有共享資料,有的執行緒要修改這些共享資料,有的執行緒要讀取這些共享資料,這才是程...