1.用宏f(x,y)实现x-y,正确的定义方式是哪个?解释下每个的含义和错的地方,哪个正确.

1.用宏f(x,y)实现x-y,正确的定义方式是哪个?解释下每个的含义和错的地方,哪个正确.
A.#define f(x,y) x-y
B.#define f(x,y) x-(y)
C.#define f(x,y) (x)-(y)
D.#define f(x,y) ((x)-(y))
沈家乐 1年前 已收到3个回答 举报

牛贝庚 幼苗

共回答了20个问题采纳率:80% 举报

D最保险,在任何情况下都适用.
ABC在某些情况下会失效,举个例子:
A#define f(x,y) x-y
那么这样调用就有问题:5 * f(3,2)
一展开就变成了 5* 3 - 2 =13,而调用者原意是 5*1=5
B和C存在类似情况,只有D最好

1年前

4

翡冷翠amber 幼苗

共回答了3个问题 举报

正确的一看就是D,反正一般选括号加得最完整的一个就是了,其他的在宏扩展的时候都会出现各种各样的问题,现列举如下
int var=3,res,a=10,b=20;
A、var*f(x,y) 宏扩展之后变为 var*x-y,而我们想要的是var*(x-y)
B,C、同A一样

1年前

0

莱茵河的女妖 幼苗

共回答了4个问题 举报

D
宏是在预编译的时候完全替换。所以不能把x和y当成一个数来看待,要当成一个任意替换的东西,所以都要加括号。

1年前

0
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 18 q. 0.027 s. - webmaster@yulucn.com