C语言 宏题目
来源:百度知道 编辑:UC知道 时间:2024/09/22 04:20:41
调用的时候是
int d,c;
d = DOUBLE(1+2);
c = 4/DOUBLE(2)
还有就是这个宏有什么缺陷
2.#define ABS(a) ((a)>0? -(a):(a)) 这个宏那里出问题了
3#define AVG(x,y) ((x+y)/2)
#define AREA(x,y) (x*y)
这2个宏又是那里出问题了
谢谢各位了
太谢谢你们了 都说好好啊
宏函数最好别用,第一个DOUBLE(x) (2*x)
当d = DOUBLE(1+2)时实际是(2*1+2)看出问题来了吧可以给x加个括号,改为DOUBLE(x) (2*(x))
第二个宏我也没看出什么问题,加括号是对的。如果应要说问题,就是当a是个带有++或——的表达式会出现错误
ABS(a) ((a)>0? -(a):(a)) 假设a为x++,x=-1,你想要的结果是得到-1但是结果会得到0.
第3个宏同样的问题,给所有的参数加括号,不然参数是个表达式时就出问题了
这几个宏的定义有些问题,修改如下,你自己品味一下:
1.#define DOUBLE(x) (2*(x))
注意x前后的括号不可少。
2.#define ABS(a) ((a)>0? (a):-(a))
3.#define AVG(x,y) ((x+y)/2)
这不错
#define AREA(x,y) ((x)*(y))
同样x,y前后的括号不可少。
d=6 c=4
后3个a的()去掉
不知道,用的时候才能知道.
1.#define DOUBLE(x) (2*x)
调用的时候是
int d,c;
d = DOUBLE(1+2);
c = 4/DOUBLE(2)
还有就是这个宏有什么缺陷
d = (2 * 1 + 2) = 4
c = 4 / (2 * 2) = 1
遇到x有算式的时候会出现意外情况
2.#define ABS(a) ((a)>0? -(a):(a)) 这个宏那里出问题了
应为#define ABS(a) ((a)>0? (a):(-a))
ABS应该为求绝对值
3#define AVG(x,y) ((x+y)/2)
#define AREA(x,y) (x