我已int x在文件1中声明并且错误地在文件2中声明了另一个char具有相同名称的类型变量,并且我等待编译器或链接器给我一个错误,但是没有显示错误.当我使用调试器时,我看到它被转换为,是真的吗?!这里到底发生了什么?!xint xchar 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;
}
Run Code Online (Sandbox Code Playgroud)
文件二
char x;
void print(void)
{
x = 100;
printf("global in file two = %d ",x);
return;
}
Run Code Online (Sandbox Code Playgroud)
我的预期结果是= 文件2中的全局=文件1中的100全局= 50
但结果是:文件2中的全局=文件1中的100全局= 100
当我使用调试器时,我看到int x转换为char x,是真的吗?!这里到底发生了什么?
你在这里很麻烦.从技术上讲,您的程序导致未定义的行为 char x是一个暂定的定义,因为它没有初始化器.这意味着链接器在链接时将其与int x另一个文件中的联合.这看起来有点奇怪,因为你的两个声明有不同的类型,但它似乎已成功链接到你的情况.无论如何,你只有一个x,幸运的是它以你看到它的方式工作(可能是小端架构).
如果您希望这两个变量是独立的,请创建它们static,并且它们将被限制在各自的翻译单元的范围内.