关于一个宏的测试(偶数判断)

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值