2017-11-14 20 views
-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?)

+3

未定義の動作のため評価されています。 – Lundin

+0

さらに、fの定義は#define f(a、b)((a)*(b)+(a)*(b)) 'でなければなりません。 [演算子の優先順位](http://en.cppreference.com/w/cpp/language/operator_precedence)(つまり、小学校の数学)。 – axiac

答えて

0

#define任意の関数を定義していませんので。それは、マクロ置換を行いますので、あなたの実際のコンパイルされたコードは次のとおりです。

はっきりUBである
cout << 
    ++i + j++ * j++ + ++k + ++i + j++ * j++ + ++k 
; 

cout << 
    ++i + (j++ * j++) + ++k + ++i + (j++ * j++) + ++k 
//  ^  ^   ^  ^
// Unexpected operator precedence!! 
; 
関連する問題