我已在文件一中声明了int x
,但我错误地在文件二中声明了另一个类型char
的变量x
,我等待编译器或链接器给我一个错误,但没有显示错误。当我使用调试器时,我发现int x
已转换为char x
,这是真的吗?!这里到底发生了什么?!
在我的代码上显示此修改:
文件一
#include <stdio.h>
int x = 50; /** declare global variable called
x **/
int main()
{
print();
printf(" global in file one = %d",x); /** Modification is just here **/
return 0;
}
文件二
char x;
void print(void)
{
x = 100;
printf("global in file two = %d ",x);
return;
}
我的预期结果是= 全局文件2 = 100全局文件1 = 50
但是结果是:文件二中的全局=文件一中的100全局= 100
当我使用调试器时,我发现int x
已转换为char x
,这是真的吗?!这里到底发生了什么?
答案 0 :(得分:5)
你在这里遇到了麻烦。从技术上讲,您的程序导致未定义的行为char x
是一个暂定的定义,因为它没有初始值。这意味着链接器在链接时将其与另一个文件中的int x
统一起来。这看起来有点奇怪,因为你的两个声明有不同的类型,但它似乎已成功链接到你的情况。无论如何,你只有一个x
,运气正如你所看到的那样(和小端架构,可能)。
如果您希望这两个变量是独立的,请将它们设为static
,并将它们限制在各自翻译单元的范围内。