当我在头文件中声明函数原型时,我可以在程序中的任何位置访问它们,即使我从不使用"extern"关键字。它们是否仅对静态库重要,或者何时需要它?
extern
函数。 extern
关键字仅对变量有用。
extern 是 C 语言中的默认存储类说明符。
在变量上显式指定它
extern int i;
如果可以在模块之间共享。然后
int i;
在其他模块中不会违反ODR。
对于功能是的,毫无用处。
对于函数声明,它们不是必需的。它们仅用于声明外部全局变量:
// header
extern int foo;
// implementation (.c)
int foo;
如果没有extern
,编译器每次遇到全局变量时都会实例化它(因为包含的标头),并且您会收到链接器错误。
此关键字的另一个用例是通过将 C 代码指定为 C 链接来使 C 代码C++兼容(这再次防止链接器错误,即由C++名称重整引起的错误):
#ifdef __cplusplus
extern "C" {
#endif
void foo(void);
#ifdef __cplusplus
}
#endif
默认情况下,所有函数都是 extern。
Extern关键字仅用于变量。