搜索

c++问题 SQR(X) X*X和SQR(X) (X*X)有区别没?

发布网友 发布时间:2024-10-24 11:23

我来回答

4个回答

热心网友 时间:2024-11-13 19:46

define定义的是简单替换,也就是直接替换就行了,而且不会有类型转换和判断的问题,至于类型检测这样的问题,是在计算表达式的时候才执行的。下面解释你的程序
a/=SQR(k+m)/SQR(k+m)
a/=k+m*k+m/k+m*k+m
然后进行表达式的计算
a/=2+1*2+1/2+1*2+1=7,最后算出a=2
如果改成SQR(X) (X*X)
则替换规则为
a/=(k+m*k+m)/(k+m*k+m)=1,最后算出a=16
如果换成SQR(X) (X)*(X)
则替换规则为
a/=(k+m)*(k+m)/(k+m)*(k+m)=3*3/3*3=3*1*3=9,最后算出a等于1。

热心网友 时间:2024-11-13 19:48

有严重的区别,自己展开再看看就知道了
c++中不提倡使用宏!容易出现 奇妙的奇怪现象

热心网友 时间:2024-11-13 19:45

ds

热心网友 时间:2024-11-13 19:48

SQR(X) X*X时
a/=SQR(k+m)/SQR(k+m);等价于
a/=k+m*k+m/k+m*k+m a/=7 答案是2
SQR(X) (X*X)时
a/=(k+m*k+m)/(k+m*k+m) a/=1,答案是16

热心网友 时间:2024-11-13 19:50

define定义的是简单替换,也就是直接替换就行了,而且不会有类型转换和判断的问题,至于类型检测这样的问题,是在计算表达式的时候才执行的。下面解释你的程序
a/=SQR(k+m)/SQR(k+m)
a/=k+m*k+m/k+m*k+m
然后进行表达式的计算
a/=2+1*2+1/2+1*2+1=7,最后算出a=2
如果改成SQR(X) (X*X)
则替换规则为
a/=(k+m*k+m)/(k+m*k+m)=1,最后算出a=16
如果换成SQR(X) (X)*(X)
则替换规则为
a/=(k+m)*(k+m)/(k+m)*(k+m)=3*3/3*3=3*1*3=9,最后算出a等于1。

热心网友 时间:2024-11-13 19:50

SQR(X) X*X时
a/=SQR(k+m)/SQR(k+m);等价于
a/=k+m*k+m/k+m*k+m a/=7 答案是2
SQR(X) (X*X)时
a/=(k+m*k+m)/(k+m*k+m) a/=1,答案是16

热心网友 时间:2024-11-13 19:54

ds

热心网友 时间:2024-11-13 19:50

有严重的区别,自己展开再看看就知道了
c++中不提倡使用宏!容易出现 奇妙的奇怪现象
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top