C語言代碼規範(七)#define

#define 宏定義的使用

#define MAX(x, y)    ( ((x) > (y)) ? (x) : (y) )
#define MIN(x, y)    ( ((x) < (y)) ? (x) : (y) )

在宏定義中要把參數用括號擴起來( ((x) > (y)) ? (x) : (y) )。

因爲宏只是簡單的文本替換,如果不注意,很容易引起BUG。

多用括號也保證宏定義不會對閱讀造成歧義。

錯誤的例子

#include <stdio.h>

#define SQR(x)    (x * x)

int main(void)
{
    int a = 0, b = 3;

    a = SQR(b + 2);

    printf("a = %d\n", a);

    return 0;
}

例子中的意圖是將b+2的二次方的值賦給a,但是宏定義會展開爲a = (b + 2 * b + 2),所以a被賦值爲11,而不是25。

因此宏定義應該修改爲

#define SQR(x) ((x) * (x))

 

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