C常見問題之類函數宏的定義方法

本博客已遷往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.當在程序中調用宏時,是用實參替換掉宏定義中的形參,這與函數調用不同,爲了避免出現歧義,在宏定義中需要將形參用()括起來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章