这涉及到宏展开
宏只是给一段代码定义了一个别名,只是纯粹替代,看一下宏替代后的代码行就知道了
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))