-5
#define f(a,b) a*b+a*b
main(){
int i=1,j=5,k=8;
cout << f(++i + j++,j++ + ++k);
return 0;
}
出力をf(a、b)= a * b + a * bと定義すると、なぜa * b?
105
(なぜ210?)
#define f(a,b) a*b+a*b
main(){
int i=1,j=5,k=8;
cout << f(++i + j++,j++ + ++k);
return 0;
}
出力をf(a、b)= a * b + a * bと定義すると、なぜa * b?
105
(なぜ210?)
#define
は任意の関数を定義していませんので。それは、マクロ置換を行いますので、あなたの実際のコンパイルされたコードは次のとおりです。
cout <<
++i + j++ * j++ + ++k + ++i + j++ * j++ + ++k
;
。
cout <<
++i + (j++ * j++) + ++k + ++i + (j++ * j++) + ++k
// ^ ^ ^ ^
// Unexpected operator precedence!!
;
未定義の動作のため評価されています。 – Lundin
さらに、fの定義は#define f(a、b)((a)*(b)+(a)*(b)) 'でなければなりません。 [演算子の優先順位](http://en.cppreference.com/w/cpp/language/operator_precedence)(つまり、小学校の数学)。 – axiac