關於一個宏的測試(偶數判斷)

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


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