c - 在 C 语言中,当我在另一个文件中声明一个不同数据类型的全局变量时,为什么没有出现错误?

标签 c extern

我试过下面的代码:

文件1.c:

int x;

文件2.c:

extern char x;
main()
{
    x=10;
    ....
    ....
}

并编译为

$gcc 文件1.c 文件2.c

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

最佳答案

File.c 中,您向编译器保证xchar 类型。由于每个翻译单元都是单独编译的,编译器无法验证这一点,并且相信你的话。并且链接器不进行任何类型检查。你最终得到了一个没有错误构建的无效程序。

这就是您应该使用头文件的原因。如果 File1.cFile2.c 都从同一个头文件中得到了 xextern 声明,那么你编译 File1.c 时会出错(因为定义与声明不匹配)。 [帽子提示@SteveJessop]

关于c - 在 C 语言中,当我在另一个文件中声明一个不同数据类型的全局变量时,为什么没有出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566453/

相关文章:

c - log() 调用的问题

c - 可能是一个愚蠢的,经常被问到的错误,涉及 C 中的数组

c - 如何定义外部变量和声明?

c++ - block 范围内没有链接?

c++ - C++中的外部模板构造函数

c++ - 与 extern "C"函数的友元似乎需要::来限定名称

创建字符串的 vector char 数组

c - 此代码第一次迭代后出现意外输出

c - getc() 用于在 C 中传入输入和读取文件

c++ - 在 C++ 源文件中隐藏变量的可见性