#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))