C++ extern使用

来源:互联网 发布:域名注册哪家比较好 编辑:程序博客网 时间:2024/06/05 06:00

首先我所理解的extern是用于将全局变量局部化。在程序链接期间,链接器根据你的变量或者函数首先要去他定义的地方,如果在当前这个编译单元内没有找到。那么就肯定会报错,不管你是否有进行声明什么的。  但是如果你有对这个函数或变量前面加一个extern声明,那么链接器就会去别的地方寻找它定义的地方了。还有就是就算声明使用了extern,但是当前的编译单元有对这个函数或者变量进行定义,那么就不需要要在去外部查找了,也就相当于覆盖了外部的(说是这么说,你想都找到了还去外面找什么找??)。哦还有一点提下我这里说的编译单元指的是.cpp文件(当然报告里面包含的头文件。)


eg

extern.cpp  code 首先extern.cpp 在编译过程中

#include <iostream>
#include "testExtern2.h"


extern void FuncForExtern(void);
extern int ValueForExtern;
extern void FuncForExtern2(void);

extern  void FuncForExtern3(void);

extern int ValueUseExtern; //没有定义的地方


int  main()
{
FuncForExtern();  //去别的编译单元查找.cpp
FuncForExtern2(); //头文件已经包含.h

FuncForExtern3();  //哦 no error 

std::cout << ValueForExtern << std::endl;

std::cout << ValueUseExtern<< std::endl;//错误 Link Error

getchar();
return 0;
}

testExtern1.cpp  code

#include <iostream>

int ValueForExtern = 10;
(void FuncForExtern(void)
{
std::cout << "TestExtern1.cpp FuncForExtern" << std::endl;
}

testExtern2.h code .h文件中的内容只要被包含就可以了,如果没有被包含那么你不要想那么多了  用不了   (不过你定义的地方就是在它里面  哦 我所指的包含是。。。)下面的.h可以试试

#include <iostream>
void FuncForExtern2()
{
std::cout << "FuncForExtern2 testExtern2" << std::endl;
}

testExtern3.h code

#include <iostream>
void FuncForExtern3(void)
{
std::cout << "testExtern3.1 FuncForExtern3" << std::endl;
}

自己理解  不对之处 还望指出, 不希望误人子弟。还是自己写写。


0 0
原创粉丝点击