編譯器
對上方程式碼反覆進行常數傳播與常數摺疊,最終會變成什麼樣的程式碼?
int n = 8;
int m = n * 2;
return m + 1;
- Areturn n * 2 + 1;
- Breturn 8 * 2 + m;
- Creturn 17;
查看答案與解析
正確答案:C. return 17;
在常數傳播中,n被指派8之後不會再被更動,因此把使用n的地方替換為8,變成 m = 8 * 2。經常數摺疊將 8 * 2 計算為16後,m = 16,再經傳播與摺疊,m + 1 成為 16 + 1 = 17。n與m的指派不再被使用,會被當作無用程式碼刪除,只剩下 return 17;。中途停下的形式,或替換錯誤的形式,都不是最終結果。
- A. n仍然殘留,傳播尚未完成。
- B. 替換有誤,計算也尚未完成。
- C. 正確。計算依 8 → 16 → 17 推進,只剩下常數。