使用extern和#including头文件有什么区别?

时间:2009-08-25 18:27:22

标签: c

我开始质疑“extern”关键字的用处,该关键字用于访问其他模块中的变量/函数(在其他文件中)。当我们使用#include预处理器导入带有变量/函数原型或函数/变量定义的头文件时,我们不是在做同样的事情吗?

2 个答案:

答案 0 :(得分:20)

extern是必需的,因为它声明该符号存在且属于某种类型,并且不为其分配存储空间。

如果你这样做:

int foo;

在多个源文件之间共享的头文件中,您将收到链接器错误,因为每个源都会创建自己的foo副本,并且链接器将无法解析该符号。

相反,如果你有:

extern int foo;

在标题中,它将声明一个在每个源文件中的其他位置定义的符号。

一个(也是唯一一个)源文件将包含

int foo;

为链接器创建单个foo实例以解析。

答案 1 :(得分:2)

没有。 #include是一个预处理器命令,它说“将此其他文件中的所有文本放在此处”。因此,包含文件中的所有函数和变量都在当前文件中定义。