如果我们 link 都是具有不同数据类型的同名变量怎么办?

what if we link both same name variable with different data type?

我试过下面的代码 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

这段代码的输出很奇怪,谁能解释一下它是怎么来的?

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

虽然 foo1(4 字节)中的执行 x 被 foo2(8 字节)中的 x 替换。最终,foo1 中 x & y(共 8 个字节)的内存被 foo2 中的 x(8 个字节)覆盖。

1078263808 值是 42 的双精度浮点表示。

注意:foo1 中的 x & y 内存是连续的。