本博客已遷往http://coredumper.cn
下面是一個類函數宏的定義,它的功能是對x進行錯誤檢查,通常用於針對系統API或者庫函數的返回值的錯誤檢查,可以準確定位程序運行時出現問題的代碼位置。
#define CHECK_ERROR(x) do{\
if( (x) != 0){\
fprintf(stderr, "Error %d occurs at file %s line %d\n", (x), __FILE__, __LINE__);\
exit(-1);\
}}while(0)
類函數宏的定義需要注意以下幾點:
1.宏定義只能出現在一行中,所以如果想寫成多行的形式,需要在每一行的結尾使用\。
2.當在程序中調用CHECK_ERROR時,實際上是用宏定義替換掉CHECK_ERROR,爲了保持C語言每條語句以;結尾的習慣,故在定義宏時使用do while語句,且while(0)後沒有;。這樣就可以用如下語句調用宏。
CHECK_ERROR(1);
3.當在程序中調用宏時,是用實參替換掉宏定義中的形參,這與函數調用不同,爲了避免出現歧義,在宏定義中需要將形參用()括起來。