#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#define a (1<<0)
#define b (1<<1)
#define c (1<<2)
#define abc (a|b|c)
#define ab (a|b)
#define zlink_plog(level) \
do { \
printf("0x%0x\n", level); \
if((level) & a) printf("a\n"); \
if((level) & b) printf("b\n"); \
if((level) & c) printf("c\n");\
}while(0);
int main()
{
zlink_plog(a|b|c);
zlink_plog(a|b); //
exit(0);
}
项目上出现一个基础问题,level是把你a|b整个放进入,这样你在(level)&a == a|b&a 为真,出问题了,所以要加上括号(a|b)&c.这样就没问题了.