作业帮 > 综合 > 作业

请帮我解释一下这个宏定义函数 \(^o^)/~

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/13 16:30:12
请帮我解释一下这个宏定义函数 \(^o^)/~
#include < iostream >
using namespace std;
#define p(s) s/s // 就是这里
void main()
{\x09cout
这里将s直接代入即可,由于s可以是表达式,
而#define p(s) s/s 的本意应该是实现s和s的除法,即除法 / 作为最低优先级
实际上,当s为表达式时,除法可能不是最低优先级
就如本例
p(3*2) = 3*2/3*2 = 3*(2/3*2) = 3*4/3 = 4 // C/C++按由右至左计算顺序
这个例子两种意图:
1、告诉学习者,define的作用是完全替换,如这里的s,不做其他任何编译和运行,如果需要达成原本的意图,应该写成define p(s) (s)/(s); 同时告诉大家define语句与函数的区别,函数会将表达式计算出值再进行传递(传递值或引用,但不会传递表达式);
2、有意设计这样的语句,实现某些技巧性的运算,即不符合人们阅读意图但符合c/c++规则的语句——不推荐一般程序员使用,容易造成阅读混乱.
再问: 麻烦3*2/3*2 = 3*(2/3*2) = 3*4/3解释一下呵
再答: 不好意思,经过验证,上面这个由右至左对计算的理解不对:先计算2/3,会发现2/3=0 编译器还是按由左至右依次计算的,即[ ( 3*2 ) /3 ] *2 = (6/3)*2 = 2*2 =4
再问: 对了,我查过书了,就这样的