ebolaman
級別: 副版主
版區: 程式設計
x38
x458
|
分享:
▲
▼
(1.) 等於 a = y *= (x%y > x-y ? --x : y++); (2.) 等於 a = y *= (0 ? --x : y++); (3.) 等於 a = y *= y++;
注意不同的編譯環境下可能對 y *= y++ <Y = -8> 有不同的定義 例如在 GNU C++ 中結果是 56 在 GNU C 中結果是 64 在 Visual Studio C++ 中結果是 64
手算的話,(1.) 看起來等於 (2.) 但是實際上組合語言完全不同,答案會有落差, (2.) 會被編譯器優化成 (3.) 造成手算答案難以判斷
此題實際正解是 56 (GNU C/C++ & VS C++) 程式設計上最好避免這種狀況,以免在不同的編譯環境下產生不同的結果
詳細請參考 C/C++ Sequence Point 和 Side Effects
|