extern可用来修饰变量、函数和进行链接指定 extern C。
1、extern用于修饰全局变量和函数
(1)在同一个文件中extern 修饰全局变量
如果全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想应用该全局变量, 则应该在引用之前用extern关键字对该变量做“全局变量声明”,表示该变量是一个已经定义的全局变量。
#include <stdio.h> int max(int x,int y); int main(void) { int result; /*外部变量声明*/ extern int g_X; extern int g_Y; result = max(g_X,g_Y); printf("the max value is %d\n",result); return 0; } /*定义两个全局变量*/ int g_X = 10; int g_Y = 20; int max(int x, int y) { return (x>y ? x : y); }
(2)在不同的文件中用extern修饰全局变量
如果在一个源文件中想引用另一个源文件中的全局变量,同样只需在引用变量的文件中用extern关键字加以声明即可;
/****max.c****/ #include <stdio.h> /*外部变量声明*/ extern int g_X ; extern int g_Y ; int max() { return (g_X > g_Y ? g_X : g_Y); } /***main.c****/ #include <stdio.h> /*定义两个全局变量*/ int g_X=10; int g_Y=20; int max(); int main(void) { int result; result = max(); printf("the max value is %d\n",result); return 0; }
(3)如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); 和int f();
2、extern C
extern "C" void fun(int a, int b);告诉编译器在编译fun函数名时按照C的规则而不是C++的规则;