为什么输出值不是18?

问题遇到的现象和发生背景

为什么输出值是10而不是18?

问题相关代码,请勿粘贴截图
#include <stdio.h>
#define ADD(x) x+x
void main()
{
    int a=2,b=1;

    printf("%d\n",3*ADD(a+b));
}
运行结果及报错内容

10

我的解答思路和尝试过的方法
我想要达到的结果

因为宏替换是替换位置,不是计算出结果
ADD(1+2)其实是1+2+1+2
所以3*2+1+2+1=10

img

当前的3 * ADD(a+b)ADD(a+b)展开后的表达式是
3 * a + b + a + b = 3 * 2 + 1 + 2 + 1 = 10
得改成#define ADD(x) ((x)+(x))才是你想的结果