3

当我在头文件中声明函数原型时,即使我从不使用“extern”关键字,我也可以在程序中的任何地方找到它们。它们只对静态库很重要,还是我什么时候需要它?

4

4 回答 4

5

函数是extern默认的。该extern关键字仅对变量有用。

于 2013-01-31T14:19:12.193 回答
2

extern 是 C 中的默认存储类说明符。

在变量上明确指定它

extern int i;

如果它可以在模块之间共享。然后

int i;

在其他模块中不会违反 ODR。

对于功能是的,非常没用。

于 2013-01-31T14:19:32.450 回答
1

对于函数声明,它们不是强制性的。它们仅用于声明外部全局变量:

// 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
于 2013-01-31T14:20:15.777 回答
0

默认情况下,所有函数都是extern ..

extern 关键字仅用于变量。

于 2013-01-31T15:15:52.977 回答