0
我正在使用gcc和clang測試.c和.cpp下的「const」關鍵字的行爲。爲什麼gcc和clang編譯爲我的程序不同的「const」結果?
#include<stdio.h>
int main(){
const int i=1;
int *pi = (int *)(&i);
*pi = 2;
printf("i = %d *pi = %d\n",i,*pi);
const int j=i;
printf("j = %d\n", j);
return 0;
}
使用不同的編譯器會導致不同的結果:
$gcc testConst.c && ./a.out
i = 2 *pi = 2
j = 2
$clang testConst.c && ./a.out
i = 1 *pi = 2
j = 1
如果我改變從.C文件到.CPP,並用G ++編譯和運行它,那麼結果是一樣的鐺版本
$g++ testConst.cpp && ./a.out
i = 1 *pi = 2
j = 1
我想知道:
- C和C++中'const'的含義有點不同,所以相同編譯器gcc的結果可能導致不同的結果?
- 編譯相同的.c文件,gcc和clang有不同的結果,這是正確的,或者這是未定義的行爲?任何C/C++標準語句都可以解釋這一點?
修改常量變量是UB。這也曾被問過很多次。 – milleniumbug