請看下面的例子:gcc的優化影響邊界檢查
int a[4];
int main() {
a[4] = 12; // <--
return 0;
}
這顯然是一個出界失誤,是不是?我想知道gcc何時會對此提出警告,並發現只有在優化爲-O2
或更高版本(這受-ftree-vrp
選項影響,該選項僅自動設置爲-O2
或更高版本)時纔會這樣做。 我真的不明白爲什麼這是有道理的,gcc是否是正確的,否則不會發出警告。
文檔具有這樣說事項:
這允許優化,以除去不必要的範圍檢查狀陣列結合檢查和空指針檢查。
不過,我不明白爲什麼檢查應該是不必要的?
關注評論downvote? – bitmask