假设有两个代码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基础课程》。