在定义f(a,b)= a * b + a * b然后为什么它给出a * b的ans?

时间:2017-11-14 12:55:09

标签: c++ increment decrement

#define f(a,b) a*b+a*b
main(){

    int i=1,j=5,k=8;
    cout << f(++i + j++,j++ + ++k);
    return 0;
}

输出

105(为什么不是210?)

1 个答案:

答案 0 :(得分:0)

因为#define 定义任何功能。它执行宏替换,因此您的实际编译代码为:

cout << 
    ++i + j++ * j++ + ++k + ++i + j++ * j++ + ++k
;

显然是UB。它被评估为

cout << 
    ++i + (j++ * j++) + ++k + ++i + (j++ * j++) + ++k
//        ^         ^               ^         ^
// Unexpected operator precedence!!
;