C++宏定义注意点

这么一段代码

#define M(x,y,z) x*y+z
main()
{
    int a = 1, b = 2, c = 3;
    printf("%d/n", M(a + b, b + c, c + a));
}

第一次做的时候自然而然地想成

(1+2)*(2+3)+(1+3)=19

然而宏定义中并没有(),所以应该是

1+2*2+3+1+3=12