C++ extern(1) extern的用处
来源:互联网 发布:分布式数据库的安全性 编辑:程序博客网 时间:2024/05/18 23:57
extern是一个关键字,它告诉编译器存在着一个变量或函数,如果没有找到相应的变量或函数,会在当前的文件或文件后面定义
先看这么一个例子:
#include<iostream>using namespace std;int main() {i = 0;func();system("PAUSE");return 0;}int i;void func() {i++;cout << "i=" << i << endl;}
这时编译会出错:
'i':indetifier not fonud
'func': identifier not found
上面代码中变量i和func在文件末尾定义,编译器是从上往下进行定义的,这时func和i无法被识别
这时需要extern关键字告诉编译器, 变量在somewhere else
#include<iostream>using namespace std;extern int i; //使用extern参数extern void func();int main() {i = 0;func();system("PAUSE");return 0;}int i;void func() {i++;cout << "i=" << i << endl;}
定义其他文件中的函数或变量,就可以用到extern关键字
使用extern关键字调用,这时候函数和变量在.cpp或者.c文件中定义和声明。
使用例子如下:
首先我们在cpp1文件中利用extern声明一个变量i
extern int i;
然后在cpp2文件中再次声明变量i并赋值
int i = 3;
#include<iostream>using namespace std;extern int i;extern void func();int main() {func();system("PAUSE");return 0;}void func() {i++;cout << "i=" << i << endl;}
结果显示i为4
所以用extern关键字声明变量后,编译器会去别的地方寻找该变量
非常类似于函数的预定义
这样就实现了可以在一个cpp文件中声明变量或函数 另一边定义变量或函数
在cpp1文件中声明和调用变量:
#include<iostream>using namespace std;extern int i; //声明extern void func();int main() {func();system("PAUSE");return 0;}
在cpp2文件中定义文件:
#include <iostream>using namespace std;int i = 3;void func() {i++;cout << "i=" << i << endl;}
extern关键字的使用可以防止因重复定义而引起的冲突错误:
例子如下:
cpp1文件中:
#include<iostream>using namespace std;int i;extern void func();int main() {func();system("PAUSE");return 0;}
cpp2文件中:
#include <iostream>using namespace std;int i = 3;void func() {i++;cout << "i=" << i << endl;}
编译运行时会发生错误:
LNK2005 "int i" (? i@@3HA) already defined in nextFile.obj
重复定义错误,
此时对i加上extern参数就可以防止重复定义.
如果一个工程现编译cpp文件,在把多个目标文件链接成为可执行文件,而两个或多个文件中,定义了相同的全局变量,那么,程序编译的时候会报错,因为编译器单独编译每个文件,在链接可执行文件的时候,由于多个目标文件中含有相同的全局变量,而生成可执行文件的时候,任何文件中定义的全局变量对其它目标文件都是可见的,此时由于变量定义冲突而发生错误
对头文件中的变量或函数不能使用extern关键字
因为头文件在编译期间会把内容插入到cpp文件中
编译的时候只编译cpp文件不编译头文件
如果在头文件中声明extern,被extern声明的变量或函数在其它cpp文件中找不到
此时会报错!!
阅读全文
0 0
- extern "C" 的用处
- extern "C"的用处
- 论extern "C"的用处?
- C++ extern(1) extern的用处
- c/c++ extern的用处详解
- c++中extern的用处
- C&C++(1) - extern "C"的作用
- extern和extern "C"的分析
- extern 和extern “C"的问题
- extern "C"的用法
- “extern c”的使用
- extern "C" 的用意
- extern "C" 的用意
- "extern" C的用法
- extern “C”的使用
- extern "C" 的作用
- extern C的使用方法
- extern "C"的使用
- Hello_World 我的学习路线
- Redis学习笔记——(三)Redis集群安装
- 导弹拦截之测试版(1163)
- 您不知道的 5 件事... Java 对象序列化
- 不定期更新一些常见/不常见的缩写全称
- C++ extern(1) extern的用处
- 互斥体与信号量的对比
- 【Django】启动Python的两种方式
- linux pidmap_init
- 高精度乘法
- 第五届图灵杯1865
- 《GO并发编程实战》—— 锁的使用
- 字符串求字节数和长度
- spring自动装配