2012-04-13 63 views
9

我刚刚浏览了gcc源文件。在gcc.c,我发现像extern声明和函数定义在同一个文件中

extern int main (int, char **); 

int 
main (int argc, char **argv) 
{ 

现在我的疑问是extern是告诉编译器的特定功能不在此文件,但会在项目的其他地方找到。但是在这里,main的定义紧接在extern声明之后。 extern声明服务的目的是什么?

看起来,在这个具体的例子,extern似乎表现得像export我们在集中使用,wherin我们出口的模块

任何想法之外的特定符号?

回答

13

你误会extern - 它告诉编译器的定义是另一个文件,它只是宣告它的存在而不定义它。它在相同的文件中被定义是完全可以的。 C具有声明的概念(声明某些事物没有定义而存在)和定义(实际上使它存在)。你可以声明你想要的东西,但只能定义一次。

由于默认情况下函数具有外部链接,因此extern关键字在这种情况下无关紧要。

0

警告可能暗示函数原型丢失。就这样。

6

函数在C中隐式地存在于外部,包括extern只是一个视觉提醒。注意,为了不使用外部功能,您可以使用static关键字。

+0

是的。在做非标准的事情时使用extern。 – Barry 2013-06-06 07:56:44

0

main函数的定义:

int main(int argc, char **argv) { ... } 

是已经声明是函数main具有外部链接的试制的语法。这意味着在main定义冗余之前的原型声明extern

2

在函数声明中,extern只是声明函数具有外部链接,这是默认的; extern关键字在这种情况下完全没用,并且效果与没有extern关键字的正常声明/原型相同。

相关问题