4

我已经int x文件一中声明,但我错误地在文件二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;
}

文件二

char x;   

void print(void)
{

    x = 100;
    printf("global in file two = %d ",x);
    return;

}

我的预期结果是 =文件二中的全局 = 100 文件一中的全局 = 50

结果是:文件二中的全局 = 100 文件一中的全局 = 100

当我使用调试器时,我看到它int x被转换为char x,是真的吗?!这里实际发生了什么?

4

1 回答 1

5

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

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

于 2013-09-24T20:28:46.017 回答