extern声明和函数定义都在同一个文件中
我只是浏览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
只是一个视觉提醒。 注意,要使函数不是extern,您可以使用static
关键字。
在函数声明中, extern
简单地声明该函数具有外部链接,这是默认值; extern
关键字在这种情况下完全没用,效果与没有extern
关键字的普通声明/原型相同。
警告可能表明缺少function原型。 就这样。
main
function的定义:
int main(int argc, char **argv) { ... }
已经是声明是函数main
的原型语法与外部链接。 这意味着在main
定义冗余之前使用extern
的原型声明。