2015-10-04 28 views
-4
#include <stdio.h> 

int main() { 
    const int a = 10; 
    int *ptr = &a; 

    printf("Initial value of a:%d\n", a); 

    *ptr = 100; 
    printf("Modified value of a: %d\n", a); 

    return 0; 
} 

輸出(gcc -O3 const_ptr.c -o const_ptr -save-temps):此代碼如何通過GCC進行優化?

Initial value of a: 10 
Modified value of a: 100 

我優化編譯的代碼啓用,但直到a值被第二printf之前修改,是代碼校正代碼優化?

+0

什麼是您的問題 –

+0

未定義的行爲。你正在修改一個'const'對象。 – EOF

+0

爲什麼你認爲優化設置應該改變代碼行爲? – OldProgrammer

回答

0

是的,因爲代碼涉及未定義的行爲,所以從優化的角度來看,編譯器做的任何事都是正確的。它可以決定產生什麼都不做的代碼,什麼都不輸出,或者它可以決定忽略const(實際上它在你的情況下做什麼),並生成適當的代碼。

當然,從實現問題的質量,良好的編譯器應該告訴你,這是非法的,並沒有做任何積極有害的(如重新格式化您的驅動器),但一切皆有可能。

+0

當我們應用代碼優化時,天氣編譯器允許改變常量值嗎? – Manjunathan

+0

謝謝,我明白了 – Manjunathan