c++编程思想中的关于宏的一个有关问题

c++编程思想中的关于宏的一个问题
程序如下:
#define BAND(x) (((x)>5&&x<10)?(x):0)

void main() 
{
for(int i=4;i<7;i++)
{
int a=i;
cout<<"a="<<a<<endl<<'\t';
cout<<"BAND(++a)="<<
BAND(++a)<<endl;
cout<<"\ta="<<a<<endl;
}
}
输出结果是
a=4
  BAND(++a)=0
  a=5
a=5
  BAND(++a)=8
  a=8
a=6
  BAND(++a)=9
  a=9


为什么第二次调用宏a变得这么大啊,求高手解答

------解决方案--------------------
短路问题
第一次4+1>5不成立,表达式后面的都不做了, 自加只执行一次
后两次5+1>5成立, 自加执行三次
------解决方案--------------------
宏中你每个X都被替换成++a 阿