📜  在C中链接具有相同变量和不同数据类型的文件

📅  最后修改于: 2021-05-26 01:31:03             🧑  作者: Mango

假设有两个代码foo1.c和foo2.c如下所示,这里的任务是链接具有相同变量名x但数据类型不同的foo1.c和foo2.c,即foo1.c中的int和foo2.c中的double 。
请注意,所有变量均未声明为extern。

对于给定的两个程序,您期望以下命令的输出是什么?

$ gcc -o myprog foo1.c foo2.c
$ ./myprog
// foo1.c
#include
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;
}

输出:

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(8个字节)中的x覆盖。

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

注意: foo1.c中的x和y地址是连续的。

相关文章: C语言中的内部和外部链接

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。