如果我们将同名变量与不同的数据类型链接怎么办?

时间:2017-04-12 04:48:53

标签: c linux gcc linker ld

我试过下面的代码foo1.c

#include<stdio.h>
void f(void);
int x = 38;
int y = 39;

int main() {
f();
printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}

foo2.c

double x;

void f() {
x = 42.0;
}

输出:

$ gcc -o myprog foo1.c foo2.c
$ ./myprog
x = 0
y = 1078263808

我得到了这个代码的奇怪输出,有人可以解释它会如何来?

1 个答案:

答案 0 :(得分:2)

在foo1.c中,你有两个变量x和y,每个变量有4个字节,总共8个字节。在foo2.c中,你有x变量为double。

foo1(4字节)中的执行x被foo2中的x替换(8字节)。最终记忆x&amp; foo1中的y(总共8个字节)被foo2中的x覆盖(8个字节)。

1078263808值是浮点表示为42的双倍。

注意:x&amp;你在foo1的记忆是连续的。