当我们想在我的void foo(void)
[我的主要功能所在]中的File1.c
中使用函数Main.c
时 - 为什么我不需要写:
extern int main(void);
在File1.c
?
假设
File1.c
和Main.c
属于单个TU。
答案 0 :(得分:6)
您永远不需要使用函数声明来编写extern
。函数默认具有外部链接。在一些旧代码中观察到一种奇怪的无法解释的习惯:将extern
添加到所有外部函数声明中。 (这可能是导致你对main
提出问题的原因。)实际上,这完全是不必要的,没有任何目的,只会使代码混乱。
如果您愿意,可以使用main
声明extern
。但这完全是多余的。
答案 1 :(得分:5)
首先,默认情况下功能为extern
。
此外,main
是“特殊的”;链接器对待它的方式不同。
答案 2 :(得分:2)
因为在可执行文件的整个部分中只需要一个main
作为执行的起点。每个翻译单元都不需要与main
建立链接。
引用C ++标准(我假设这也是C的情况) -
ISO / IEC 14882:2003(E)3.6.1
3 [...]主要的连接(3.5)是 实现定义。 [...]