可能是重复的:
`extern`关键字对C函数的影响 好的,我已经花了几个小时阅读了大量关于`extern`关键字的含义的信息。有一件事情让我困扰不已,我找不到任何相关信息。 据我所知,`extern`关键字基本上告诉编译器变量或函数只是一个声明,并且它在某个地方被定义,因此编译器不必担心这个问题,链接器会处理它。
当输入以下内容时,编译器(我使用的是gcc 4.2.1)生成的警告:
这是一个定义,应该生成相同的警告,但它没有。我在这里能找到的唯一解释是,定义覆盖了
如果有人能解释一下这个问题,我将非常感激。谢谢!
`extern`关键字对C函数的影响 好的,我已经花了几个小时阅读了大量关于`extern`关键字的含义的信息。有一件事情让我困扰不已,我找不到任何相关信息。 据我所知,`extern`关键字基本上告诉编译器变量或函数只是一个声明,并且它在某个地方被定义,因此编译器不必担心这个问题,链接器会处理它。
当输入以下内容时,编译器(我使用的是gcc 4.2.1)生成的警告:
extern int var = 10;
支持这一点。使用 extern
,应该只是一个声明,所以它是不正确的。
然而,让我困惑的是,当输入以下内容时,没有任何警告或提示:
extern int func() {return 5;}
这是一个定义,应该生成相同的警告,但它没有。我在这里能找到的唯一解释是,定义覆盖了
extern
关键字。然而,按照这个逻辑,为什么它不会在变量定义时覆盖呢?或者说,关键字在与变量一起使用时有特殊含义吗?如果有人能解释一下这个问题,我将非常感激。谢谢!