C语言 宏题目

来源:百度知道 编辑:UC知道 时间:2024/09/22 04:20:41
1.#define DOUBLE(x) (2*x)

调用的时候是
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