在具体到 Extern 的用法之前,有两个概念必须要能分清楚:声明(Declaration)和定义
(Definition)之间的区别. 声明一个变量只是宣布这个变量的属性,也就是说告诉编译器这
个变量时什么类型(如 int, long, string 等). 而定义一个变量不仅是声明了变量的属性,同
时也告诉编译器给变量分配相应的存储空间. 例如:
//test.c
int value; //定义一个变量名为 value,并分配相应存储空间
double arr[MAX_INTEGER];//定义数组变量名为 arr,并分配相应的存储空间
extern int value1;//声明变量名为 value1 且这个变量在其他文件中定义的,没有分配存储空间
extern double arr1[MAX_INTEGER]//…同上
int main(){
….
}
理解了声明和定义的区别以后,我们开始进入今天的主题 Extern 的用法, 首先我们看看
Extern 修饰符的作用是什么? Extern 作用其实很简单,就是允许你程序的一个模块调用另
外一个模块里定义的全局变量或函数. 这话听起来有点拗口,简单点就是你在一个 A.cpp 文
件里面定义了一个全局变量 X,但是你 B.cpp 想引用这个 X,这时用 Extern 修饰符就能办到
了. 通常情况下你会把这个全局变量定义在头文件里.这样可能性更强些.
Extern 适用于变量和函数
下面我们就看个例子,这个例子记得有人写过,但是,我觉得他写的测试例子不太合适,所
以就重写一下。
//Create a ext.h
Extern int value;
//create a ext.cpp
#include “stdio.h”
#include “ext.h”
Int value = http://blog.soso.com/qz.q/5;
Void printExt(){
Printf(“ext %d”, value);
}
//create test.cpp
#include “stdio.h”
#include “ext.h”
Extern void printExt();
int main(void){
value =http://blog.soso.com/qz.q/3
printf(“ test %d”,value);
printExt();
printf(“ test %d”, value)
}
打印出来的结果,大家应该都能猜到是:
Test 3
Ext 3
Test 3
加载中,请稍候......