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