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
|