C 为什么代码分析不是';对不对?

C 为什么代码分析不是';对不对?,c,C,为什么输出是“0-6”而不是“460”?k=8,l=2不是吗 #define MAC(a,b) (a<b ? a*b:a-b) void main (void) { int i=2; int j=4; int k=MAC(i,j); int l=MAC(j,i); i=MAC(k+l,k-l); j=MAC(k-l,k+l); printf("%d %d\n", i,j); } 定义MAC(a,b)(a一个直接的问题 MAC(k+l,k-l)

为什么输出是“0-6”而不是“460”?k=8,l=2不是吗

#define MAC(a,b) (a<b ? a*b:a-b)
void main (void)
{
   int i=2;
   int j=4;
   int k=MAC(i,j);
   int l=MAC(j,i);
   i=MAC(k+l,k-l);
   j=MAC(k-l,k+l);
   printf("%d %d\n", i,j);
}

定义MAC(a,b)(a一个直接的问题

MAC(k+l,k-l)
变成

(k+l<k-l ? k+l*k-l:k+l-k-l)
           ^^^^^^^

#定义MAC(a,b)(每行后面都有ado print语句。学会调试自己的代码=)…由于编译器可能会将其内联,因此生成的代码可能几乎相同。
#define MAC(a,b) ((a)<(b) ? (a)*(b):(a)-(b))
int mac (int a, int b) {
    if (a < b)
        return a * b;
    return a - b;
}
#define MAC(a,b) (a<b ? a*b:a-b)
void main (void)
{
   int i=2;
   int j=4;
   int k= i<j ? i*j:i-j;
   int l= j<i ? j*i:j-i;
   i= k+l<k-l ? k+l*k-l:k+l-k-l;
   j= k-l<k+l ? k-l*k+l:k-l-k+l;
   printf("%d %d\n", i,j);
}