【发布时间】:2015-03-26 06:47:35
【问题描述】:
#include<stdio.h>
int main()
{
const int a=1;
int *p=(int *)&a;
(*p)++;
printf("%d %d\n",*p,a);
if(a==1)
printf("No\n");//"No" in g++.
else
printf("Yes\n");//"Yes" in gcc.
return 0;
}
以上代码在g++ 编译中给出No 作为输出,在gcc 编译中给出Yes。谁能解释一下这背后的原因?
【问题讨论】:
-
您是在问“为什么允许这种情况发生?”或“我知道任何事情都可以发生,但是编译器内部的什么机制使这个特殊的事情发生了?”?
-
@immibis 我猜是后者“我知道任何事情都可以发生,但是编译器内部的什么机制让这件事发生了?”
-
@RohitChauhan ,阅读答案。
-
您使用的是
g++和gcc的哪个版本?另外,您使用了哪些命令行选项来编译代码?我希望g++将a替换为if中的文字常量1,但gcc不是。 -
@MohitJain 不是真的