Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我尝试了以下代码:
文件1.c:
int x;
文件2.c:
extern char x; main() { x=10; .... .... }
并编译为
$gcc 文件 1.c 文件 2.c
我没有收到任何错误,但我期待一个。
在File.c中,您向编译器承诺x类型为char. 由于每个翻译单元都是单独编译的,编译器无法验证这一点,并相信你的话。并且链接器不做任何类型检查。您最终会得到一个构建时没有错误的无效程序。
File.c
x
char
这就是为什么你应该使用头文件。如果File1.c和File2.c都从同一个头文件中得到extern声明x,那么编译时会出错File1.c(因为定义与声明不匹配)。[帽子提示@SteveJessop]
File1.c
File2.c
extern