当我们想要在主函数Main.c中使用另一个文件File1.c中的函数,比如
假设File1.c和Main.c在同一个翻译单元中。
void foo(void)
,为什么我们不需要在File1.c中写:extern int main(void);
假设File1.c和Main.c在同一个翻译单元中。
void foo(void)
,为什么我们不需要在File1.c中写:extern int main(void);
extern
。函数默认具有外部链接。在一些较旧的代码中观察到了一种奇怪且无法解释的习惯:将extern
添加到所有外部函数声明中(这可能是你关于main
的问题所在)。实际上,这完全没有必要,毫无意义,只会使代码混乱无用。extern
来声明main
。但这完全多余。extern
。main
函数是“特殊的”,链接器会以不同的方式处理它。main
作为执行的起点,所以每个翻译单元都不需要与main
具有链接关系。引用自C++标准(我认为对于C也是同样的情况)-ISO/IEC 14882:2003(E) 3.6.1:“3 [...] main
的链接(3.5)是实现定义的。[...]”
不需要
包含源文件 - 否则在编译时它们将进入文件作用域!! - Expert Noviceextern
的作用,它是用于不同翻译单元之间的链接,而不是文件之间的链接。 - Expert Novice