关于#c++#的问题:就算int的20除以7也不会等于5啊(语言-c++)

img


请问为啥输出为5?就算int的20除以7也不会等于5啊(语言-c++)

这涉及到宏展开
宏只是给一段代码定义了一个别名,只是纯粹替代,看一下宏替代后的代码行就知道了
c = 20/(a+b)>(b)?(a+b):(b);
先是20/(a+b)=20/7=3,3是小于b的,所以这个表达式就是c = b ,因此最后c值为5

宏定义不是函数
宏定义不是函数
宏定义不是函数
重要的事情说3遍
每天都有人问跟宏定义有关的问题
都把宏当函数在用,以为是个整体,要先算出整体一个数再参与后续运算
但是它其实就是个简单的字符串替换
如果你想让它像真正的函数那样不管传进一个什么数,都先计算好这个数
那么不仅里面每个变量要加括号,最后整体也要再加括号
否则遇到优先级更高的运算符,肯定就跟别的运算先结合了

外面还缺少一层括号

max(x,y) ((x)>(y)?(x):(y))