【发布时间】:2017-07-08 12:20:56
【问题描述】:
我正在使用 gcc 和 clang 测试 .c 和 .cpp 下“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++编译运行,结果和clang版本一样
$g++ testConst.cpp && ./a.out
i = 1 *pi = 2
j = 1
我想知道:
- 'const' 在 C 和 C++ 中的含义有点不同,所以相同编译器 gcc 的结果会导致不同的结果吗?
- 编译同一个 .c 文件,gcc 和 clang 有不同的结果,这是正确的,还是未定义的行为?任何可以解释这一点的 C/C++ 标准语句?
【问题讨论】:
-
修改 const 变量是 UB。这也被问过很多次了。
标签: c++ gcc casting clang constants