永发信息网

[C++]两个题的区别

答案:4  悬赏:0  手机版
解决时间 2021-03-29 15:16
[C++]两个题的区别
最佳答案
先来说说define宏定义的理解
类似这种#define f(x) 意思是定义一个函数,这个f(x)在编译阶段会被后面的与x相关的语句所替代。
例如f(x) x*x
如果代码里有f(3) 则被替换为3*3

现在来看题
f(x) x*x
f(3+4) 替换为 3+4 * 3 + 4
可能你要说,x不是3+4=7吗,为什么替换不加括号。注意, 替换要严格按照格式,原来没有括号就不能加括号。如果要加括号,应该是
f(x) (x)*(x)
所以第一题19

第二题
f(x) x*x, x + x
f(3) 替换为 3*3, 3 + 3
结合cout
cout<<3*3, 3+3;
结果就输出了第一部分的9
可以自己试试cout<<9,6;

结果会输出9
全部回答
考的是宏定义时,不加括号的隐患。。
就是问f(x)会输出什么
宏定义就是替换,所以f(3+4)=3+4*3+4=19追答而第二题,替换后是cout<<(3*3,3+3),这相当于向cout传递了两个参数,但是只能输出一个,也就是第一个。需要注意的是,这里并不是逗号表达式。
#define f(x) x*x        //当f(3+4)时 调用的是 3+4*3+4 所以等于 19
#define f(x) x*x,x+x    //当f(3)时,实际是3*3,3+3 调用cout<
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯