extern声明和函数定义都在同一个文件中

Pav*_*ath 11 c declaration extern function-declaration

我只是浏览gcc源文件.在gcc.c,我发现了类似的东西

extern int main (int, char **);

int
main (int argc, char **argv)
{
Run Code Online (Sandbox Code Playgroud)

现在我的疑问是extern告诉编译器特定的函数不在这个文件中,但是会在项目的其他地方找到.但是在这里,定义main是在extern声明之后立即.extern宣言服务的目的是什么?

看起来,在这个具体的例子中, extern似乎表现得像export我们在汇编中使用的那样,我们在模块之外输出一个特定的符号

有任何想法吗?

pax*_*blo 14

你误解了extern- 它没有告诉编译器定义是在另一个文件中,它只是声明它存在而不定义它.在同一个文件中定义它是完全可以的.

C具有声明的概念(声明存在而不定义它的东西)和定义(实际上使它存在).您可以根据需要随意声明某些内容,但只能定义一次.

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


cni*_*tar 6

函数在C中是隐含的外部.包括extern只是一个视觉提醒.注意,要使函数不是extern,您可以使用static关键字.