用于声明在其他地方定义的(或具有外部链接的)对象或函数。通常,它用于声明要在模块中使用的对象或函数,而该模块中未定义相应的对象或函数:
/* file1.c */ int foo = 2; /* 具有外部链接,因为它是在文件范围中声明的。 */
/*file2.c*/ #include <stdio.h> int main(void) { /* `extern` 关键字引用外部定义 `foo`. */ extern int foo; printf("%d\n", foo); return 0; }
通过在C99中引入关键字 inline,事情变得更加有趣:
/*通常应该放在头文件中,以便所有用户都能看到定义*/ /*提示编译器函数“bar”可能是内联的*/ /*和禁止生成外部符号,除非另有说明。*/ inline void bar(int drink) { printf("You ordered drink no.%d\n", drink); } /*只在一个.c文件中找到。 创建“bar”的外部函数定义以供其他文件使用。 编译器可以在内联版本和外部版本之间进行选择 调用“bar”时的定义。没有这一行,`bar`就只能是内联的 函数,其他文件将无法调用它。*/ extern void bar(int);