int main()
{
extern long long a;
a=100000000000; //10 raised to power 11
printf("%lld",a);
return 0;
}
int a;
输出:100000000000
int一个平均值定义,它将4个字节分配给变量a,但是extern long long a是指定变量类型的声明,与内存分配无关。因此,如果我将一个值10 ^ 11分配给a(4字节大),它不应该导致溢出吗?
答案 0 :(得分:0)
是的,确实会导致溢出。幸运的是,你的程序很短,你没有注意到损坏。
您的代码将8个字节写入4字节变量。这将在内存中a
之后的任何内容上涂鸦。在你的情况下,在a
之后没有声明,所以它可能是在可用空间上写的,但这并不能保证。无论如何,似乎没有什么关键取决于成功完成你的程序的记忆。
有些编译器可能能够检测到这一点,但有些则不会。在一般情况下,在不同的源文件中声明a
,这是不可检测的。这就是为什么最好将extern
声明放在头文件中,然后在声明真实变量的源文件中包含该头,以及使用它的源文件;这样编译器就有机会检查声明匹配。