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
私は.cppファイル、およびそれをコンパイルして実行する++グラム使用する.Cからファイルを変更した場合、結果が打ち鳴らすと同じですバージョン
$g++ testConst.cpp && ./a.out
i = 1 *pi = 2
j = 1
私が知りたい:
- CとC++の 'const'の意味は少し違うので、同じコンパイラgccの結果は異なる結果につながりますか?
- 同じ.cファイルをコンパイルすると、gccとclangの結果は異なりますが、これは正しいですか?これは未定義の動作ですか?これを説明できるC/C++標準ステートメント
const変数の変更はUBです。またこれは以前に何度も尋ねられてきました。 – milleniumbug