如果我在另一个文件中声明另一个具有相同名称的变量会发生什么?

Arm*_*gdy 4 c

我已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,是真的吗?!这里到底发生了什么?

Car*_*rum 5

你在这里很麻烦.从技术上讲,您的程序导致未定义的行为 char x是一个暂定的定义,因为它没有初始化器.这意味着链接器在链接时将其与int x另一个文件中的联合.这看起来有点奇怪,因为你的两个声明有不同的类型,但它似乎已成功链接到你的情况.无论如何,你只有一个x,幸运的是它以你看到它的方式工作(可能是小端架构).

如果您希望这两个变量是独立的,请创建它们static,并且它们将被限制在各自的翻译单元的范围内.