一般来说,extern关键字用于三种场合:
1、用于头文件预编译时对于C语言编译的声明,如常见的:
#ifndef _shader_h_
#define _shader_h_
#ifdef _cplusplus
extern "C"{
}
#endif
#endif
一般这种情况是表示在C++中引用C语言中的函数和变量,如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
2、用于定义外部变量。
extern GLint xParam;
仅仅声明xParam是个外部变量,而其实际定义是在GLint xParam=0的语句中定义的。
声明和定义是完全不同的两个概念,个人理解为声明更类似于引用,这样可以避免在LINK时产生重复定义,某个函数到其他的OBJ文件中需要定义(内存地址)时产生冲突出错,但是注意并不是所有的变量都能用extern声明,只有全局变量并且没有被static 声明的变量才能声明为extern。 如果你不想自己的全局变量被其他文件引用,就加上static声明。
3、用于函数声明。
函数的声明与定义和变量类似,仅仅是暗示这个函数可能在别的源文件里定义。