看看这个程序竟然能输出

来源:百度知道 编辑:UC知道 时间:2024/06/02 17:11:11
#include <stdio.h>
#define HDY(A,B) A/B
#define PRINT(Y) printf("%d",Y)
void main()
{
int a=1,b=2,c=3,d=4,k;
k=HDY(a+c,b+d);
PRINT(k);
}
结果…6…是???
结果为什么不是0

a+c/b+d = 1+3/2+4 = 6,当然是6了。
#define HDY(A,B) A/B 修改为#define HDY(A,B) (A)/(B)才是你想要的结果

典型的宏定义错误:应该这样写
#define HDY(A,B) (A)/(B)
或者更安全的写法
#define HDY(A,B) ((A)/(B))

#include <stdio.h>
#define HDY(A,B) (A)/(B) //宏定义有误,要用括号括起
#define PRINT(Y) printf("%d",Y)
void main()
{
int a=1,b=2,c=3,d=4,k;
k=HDY((a+c),(b+d)); //在没有括号时这个式子变成a+c/b+d = 1+3/2+4 = 6
PRINT(k);
}

前些天正好学到,呵呵
宏定义其实就是字符串的替换,A B也都是替换,他们没有数据类型,不能理解成函数的参数,所以都要加括号的,应该写成((A)/(B))的形式,否则使用上还会遇到问题,如果碰到更高优先级的预算符,结果就不对了