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

时间:2013-09-24 20:24:07

标签: c

我已在文件一中声明了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,这是真的吗?!这里到底发生了什么?

1 个答案:

答案 0 :(得分:5)

你在这里遇到了麻烦。从技术上讲,您的程序导致未定义的行为char x是一个暂定的定义,因为它没有初始值。这意味着链接器在链接时将其与另一个文件中的int x统一起来。这看起来有点奇怪,因为你的两个声明有不同的类型,但它似乎已成功链接到你的情况。无论如何,你只有一个x,运气正如你所看到的那样(和小端架构,可能)。

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