#include <stdio.h>
//#define EVEN(x) ((x)%2 == 0)? 0 : 1
#define EVEN(x) (((x)%2== 0) ? 1 : 0)
int temp1 = 2;
int temp2 = 1;
int main()
{
if(EVEN(temp1) && EVEN(temp2))
printf("1\n");
else if(!(EVEN(temp1)) && EVEN(temp2))
printf("2\n");
else if(EVEN(temp1) && !(EVEN(temp2)))
printf("3\n");
else
printf("4\n");
return 0;
}
就拿上邊的EVEN宏爲例,第一個定義的EVEN和第二個的區別是EVEN後邊的定義有無括號包起來,相信熟悉C語言的朋友已經看出些什麼來了……
對!第一個沒有括號的是有問題的,經測試,用第一個的話會打印 1 ;而自己邏輯判斷一下應該是 3 纔對。
關於宏的定義規則不再贅述。主要是自己做了一個項目,這個宏導致了一個bug解了一天多才發現是這裏的錯誤,汗……
附一個偶數判斷宏:
#define EVEN(x) ((((x)&0x01)==1)?0:1)