【发布时间】:2010-10-25 19:00:51
【问题描述】:
在 C 语言中,我没有注意到在函数声明之前使用的 extern 关键字的任何影响。
起初,我认为在单个文件中定义extern int f(); 时强制您在文件范围之外实现它。但是我发现两者都有:
extern int f();
int f() {return 0;}
和
extern int f() {return 0;}
编译得很好,没有来自 gcc 的警告。我用gcc -Wall -ansi;它甚至不接受// cmets。
在函数定义之前使用extern有什么影响吗?或者它只是一个对函数没有副作用的可选关键字。
在后一种情况下,我不明白为什么标准设计者会选择在语法中添加多余的关键字。
编辑:澄清一下,我知道extern 在变量中的用法,但我只是在函数中询问extern。
【问题讨论】:
-
根据我在尝试将其用于某些疯狂的模板目的时所做的一些研究,大多数编译器不支持 extern,因此实际上并没有做任何事情。
-
它并不总是多余的,请参阅我的回答。任何时候您需要在模块之间共享您不希望在公共标头中的内容时,它都非常有用。然而,在公共头文件中“外部化”每个函数(使用现代编译器)几乎没有好处,因为他们可以自己解决。
-
@Ed .. 如果 volatile int foo 是 foo.c 中的全局变量,并且 bar.c 需要它,则 bar.c 必须将其声明为 extern。它确实有它的优点。除此之外,您可能需要共享一些您不希望在公共标头中公开的功能。
-
@Barry 如果有的话,另一个问题是这个问题的副本。 2009 年与 2012 年