繁体   English   中英

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

[英]extern declaration and function definition both in the same file

我只是浏览gcc源文件。 gcc.c ,我找到了类似的东西

extern int main (int, char **);

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

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

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

有任何想法吗?

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

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

因为默认情况下函数具有外部链接,所以extern关键字在这种情况下是无关紧要的。

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

在函数声明中, extern简单地声明该函数具有外部链接,这是默认的; extern关键字在这种情况下完全没用,效果与没有extern关键字的普通声明/原型相同。

警告可能表明缺少功能原型。 就这样。

main功能的定义:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM