c基础 宏 函数

来源:百度知道 编辑:UC知道 时间:2024/06/30 02:22:27
#define SQUARE(a)((a)*(a))
int Square(int a){return a * a;}
int main(int argc, char* argv[])
{
int a,b;
a = b = 5;
int c = SQUARE(++a);
int d = Square(++b);
printf("c=%d,d=%d\n",c,d);
return 0;
}
————————————————————
请问:为什么结果不一致

宏只是简单替换
SQUARE(++a)
展开
((++a)*(++a)) /* 这个运算结果依赖编译器的具体实现 */

而函数调用
Square(++a);
相当于
++a;
Square(a);

所以在使用宏的时候,宏的参数要尽量避免使用自增自减操作。