我试过下面的代码:
文件1.c:
int x;
文件2.c:
extern char x;
main()
{
x=10;
....
....
}
并编译为
$gcc 文件1.c 文件2.c
我没有得到任何错误,但我期待一个错误。
最佳答案
在File.c
中,您向编译器保证x
是char
类型。由于每个翻译单元都是单独编译的,编译器无法验证这一点,并且相信你的话。并且链接器不进行任何类型检查。你最终得到了一个没有错误构建的无效程序。
这就是您应该使用头文件的原因。如果 File1.c
和 File2.c
都从同一个头文件中得到了 x
的 extern
声明,那么你编译 File1.c
时会出错(因为定义与声明不匹配)。 [帽子提示@SteveJessop]
关于c - 在 C 语言中,当我在另一个文件中声明一个不同数据类型的全局变量时,为什么没有出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566453/