首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC6.0 i++ * i++ 未定義行為:編譯器相關結果不可移植

     編輯:程式設計綜合問答

結論

表達式 `s = (i++) * (i++)` 在 C/C++ 中屬於 **未定義行為 (Undefined Behavior, UB)**。標準未規定副作用 (遞增) 何時生效、求值順序,不同編譯器、優化等級、上下文結果均可能不同。

VC6.0 結果為 1 的原因

VC6.0 可能先生成代碼:
1. 讀取 `i` (0) → 暫存
2. 讀取 `i` (0) → 暫存
3. 相乘 → 0
4. 兩次遞增 → `i` 變 2
5. 賦值 `s=0` (但題目說結果 1,可能版本差異)。無論如何,**不可依賴**。

正確寫法

int i = 0;
int a = i++; // a=0, i=1
int b = i++; // b=1, i=2
int s = a * b; // s=0, 明確定義行為
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved