我试过以下代码:
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]