在C中,当我在另一个文件中声明不同数据类型的全局变量时,为什么不出错?

Adi*_*Adi 11 c extern

我试过以下代码:

FILE1.C:

int x;
Run Code Online (Sandbox Code Playgroud)

file2.c中:

extern char x;
main()
{
    x=10;
    ....
    ....
}
Run Code Online (Sandbox Code Playgroud)

编译为

$ gcc File1.c File2.c

我没有得到任何错误,但我期待一个.

NPE*_*NPE 18

File.c,您承诺x类型的编译器char.由于每个翻译单元都是单独编译的,因此编译器无法验证这一点,并且会接受您的意见.并且链接器不进行任何类型检查.您最终会得到一个无错误的程序.

这就是您应该使用头文件的原因.如果File1.c并且File2.c两者都从相同的头部获得extern声明x,那么在编译时会出现错误File1.c(因为定义与声明不匹配).[帽子小贴士@SteveJessop]