为什么main不被声明为extern

时间:2011-09-19 14:27:19

标签: c

当我们想在我的void foo(void) [我的主要功能所在]中的File1.c中使用函数Main.c时 - 为什么我不需要写:

extern int main(void);

File1.c

  

假设File1.cMain.c属于单个TU。

3 个答案:

答案 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)是   实现定义。 [...]