我int x
在文件1中声明了一个文件,并且错误地在文件2中声明了另一个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
但是结果是:文件2中的全局= 100文件1中的全局=
当我使用调试器时,我看到将int x
其转换为char x
,是吗?在这里实际发生了什么?
您在这里遇到麻烦。从技术上讲,您的程序会导致不确定的行为。char x
是暂定的定义,因为它没有初始化程序。这意味着链接器在链接时将其与int x
另一个文件中的统一。看起来有些奇怪,因为您的两个声明具有不同的类型,但是在您的情况下似乎已成功链接。无论如何,您只有一个x
,而幸运的是使它按您看到的方式工作(可能还有小端架构)。
如果您希望两个变量是独立的,请将static
它们设为,它们将被限制在各自翻译单元的范围内。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句