/** * 书本:【ThinkingInC++】 * 功能:关于宏的使用,探讨使用宏的缺点 * 时间:2014年9月11日07:50:54 * 作者:cutter_point */ #include"../require.h" #include<fstream> using namespace std; //这里就是用BAND(x)代替后面的那一串函数 #define BAND(x) (((x)>5 && (x)<10) ? (x) : 0) int main() { ofstream out("macro.txt"); assure(out, "macro.txt"); for(int i=4 ; i < 11 ; ++i) { int a=i; out<<"a= "<<a<<endl<<'\t'; //这里就要小心了,记住用宏代替之后的结果展开应该是这样的 //(((++a)>5 && (++a)<10) ? (++a) : 0)这里调用了三次++a, //好的,代码一旦执行,问题马上就体现出来了 out<<"BAND(++a)="<<BAND(++a)<<endl; out<<"\t a="<<a<<endl; } return 0; } /* 执行结果: a= 4 BAND(++a)=0 a=5 a= 5 BAND(++a)=8 a=8 a= 6 BAND(++a)=9 a=9 a= 7 BAND(++a)=10 a=10 a= 8 BAND(++a)=0 a=10 a= 9 BAND(++a)=0 a=11 a= 10 BAND(++a)=0 a=12 */
时间: 2024-12-06 07:03:22