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++中不提倡使用宏!容易出现 奇妙的奇怪现象