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;
}
自己理解 不对之处 还望指出, 不希望误人子弟。还是自己写写。
- extern "C"使用
- “extern c”的使用
- extern “C”的使用
- extern "C"的使用
- extern "C"的使用
- extern "C"的使用
- 何时使用 extern "C"
- extern "c"使用
- extern "C"的使用
- 为什么使用extern “C”?
- extern"C"使用详解
- extern c 的使用
- extern "C"使用
- extern ”C"的使用
- extern "c" 什么时候使用
- extern "C"使用
- extern “C”的使用
- extern C的使用
- POJ 2406 Power Strings
- C++中的public private protected
- cocos2d-x初学笔记09:进度条Progress
- 关于三进制
- HDU-3791-判断一棵树是不是二叉搜索树
- C++ extern使用
- Java程序打包成jar包
- magento -- 给后台分类管理页的分类商品加一栏商品类型
- 【浏览器】缩放是缩放CSS像素(缩放比例为1时,一个CSS像素等于一个屏幕像素)
- 数据的存储(1)
- 无法使用SecureCRT访问虚拟机之IP设置问题
- 进程、线程调度、优先级与关联性
- POJ 3352 求割边
- 利用 SysRq 键排除和诊断系统故障