c++多个源文件共用一个全局变量(extern 的用法)

例子:

头文件:state.h    源文件:state.cpp

其它源文件:t1.cpp   t2.cpp  t3.cpp,  这些源文件都包含头文件state.h。

需要定义一个全局变量供这些源文件中使用:方法如下

1、在 state.h声明全局变量: extern int a;

2、在state.cpp中定义该全局变量:int a = 10;

这样其它源文件就可以使用该变量啦

这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义:  
  (1)声明必须使用extern关键字;(2)不能给变量赋初值    
  extern   int   a;   //声明

int   a;   //定义

int   a   =   0; //定义

extern   int   a   =0;   //定义

头文件中应使用extern 关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。头文件请不要定义任何变量,那是非常业余的行为……

一般在头文件中申明,用extern, 在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。

头文件只能申明全局变量(extern),不可定义(不推荐使用)     .cpp里,在最外层定义即可(int gi),直接引用

如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效,在别的文件中无效
在.h里使用static定义,不会进行编译(.h文件不编译),只会在其每个include的cpp文件中包含编译,相当于在.cpp里使用static 定义。

时间: 2024-11-07 03:31:21

c++多个源文件共用一个全局变量(extern 的用法)的相关文章

c++多个文件中如何共用一个全局变量

例子: 头文件:state.h   源文件:state.cpp 其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h. 需要定义一个全局变量供这些源文件中使用:方法如下 1.在 state.h声明全局变量: extern inta; 2.在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是"声明",不是"定义"!根据C++标准的规定,一个变量声明必须同时满足两个条件,否

C/C++多个源文件访问同一全局变量

正确的实现方法是:在其它文件都引用的头文件中用extern关键字声明一个链接属性为external的全局变量,并在对应的源文件中定义该变量.然后在需要使用该变量的源文件中用extern关键字声明该全局变量,这样就能够在不同的言文件中共享全局变量了. 例如,有三个源文件file1.cpp.file2.cpp和file3.cpp需要共享一个全局变量a,正确的方法是:在头文件file1.h中声明全局变量a(注:省略此声明也可以通过编译,但是此声明表明了全局变量定义的位置,增加代码可读性): 在源文件f

IOS总结 静变量static、全局变量extern、局部变量、实例变量

1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用static. 静态变量的优点:1.节省内存.静态变量只存储一处,但供所有对象使用. 2.它的值是可以更新的. 3.可提高时间效率.只要某个对象对静态变量更新一次,所有的对象都能访问更新后的值. 2.全局变量extern 什么是全局变量:也称之为外部变量,是在方法外部定义的变量.它不属于哪个方法,而是

命名空间 extern的用法 static全局变量

std是标准库中的命名空间: 关于extern的用法可以参考文献http://blog.163.com/sunjinxia%40126/blog/static/9498487920131214502107/,讲解的非常清晰 这里有一个关于static全局变量的讲解http://www.360doc.com/content/16/0115/15/15947598_528164347.shtml 引用一个定义在其它模块的全局变量或函数(如,全局函数或变量定义在A模块,B欲引用)有两种方法,一.B模块

Android两个ListView共用一个万能的BaseAdapter

Android两个ListView共用一个万能的BaseAdapter 升级之前的MyAdapter.java package run.yang.com.listviewactivedemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAd

一个全局变量引起的DLL崩溃

参考我发的帖子: http://bbs.csdn.net/topics/390737064?page=1#post-397000946 现象是exe程序在加载dll的时候崩溃了,莫名其妙的崩溃了.换其它DLL没问题,我又写了个DEMO程序使用这个DLL也是一个现象,用OD加载EXE,用ODDLLLOADER加载DLL,结果也是一样的崩..搞的我也差点崩溃了.. 加载上微软符号表后发现: 然后自然而然的一个一个内核函数去查找去找可能,百度谷歌都翻了,看雪论坛也看了. 法个克,这个问题找了很长时间.

确保一个请求共用一个上下文

//职责:确保一个请求共用一个上下文 public class DataBaseContextFactory { //返回基类,这样就可以随意做到切换上下文了 public static DbContext GetDataTabelContext() { //共用一个请求上下文实例 DbContext dbcontext = CallContext.GetData("DbContext") as DbContext; if (dbcontext == null) { dbcontext

linux 编译时多个源文件生成一个目标文件

obj-m := target.o target-objs :=  src1.o src2.o src3.o linux 编译时多个源文件生成一个目标文件

ajax 异步调用把返回值赋给一个全局变量的用法,最主要的就是把async属性改为 false,

<script> $(document).ready(function () { <% string dqsj = System.DateTime.Now.ToString("yyyy-MM-dd"); %> seach(); }); var shuju = ""; var sj = ""; function se() { seach(); } function seach() { $(function () { var