全局变量一般这样定义:
1。在一类的.cpp中定义 int myInt;
然后再在要用到的地方的.cpp里extern int myInt;这样就可以用了。
2。在stdafx.cpp中加入:
int myInt;
然后在stdafx.h中加入:
extern int myInt
这样定义以后无论在什么文件中都是可见的.
3。比较规范的是,先定义一个Glbs.h,把所有的全局变量原始定义放进去。然后定义一个Externs.h,把你先前定义在Glbs.h中的变量都加上extern。注意:如果你在Glbs.h中设置了初值,那么在Externs.h中就不要加值了。然后调用时,第一次调用的#i nclude <Glbs.h>,以后调用的#i nclude <Externs.h>
另:
问:如何在VC++中使用全局变量,以使文档中的所有类都能访问。
答:把该变量放到该应用程序类的头文件中的attribute处。然后,在程序的任何地方,你都可以用下面的方法来访问该变量:
CMyApp *app=(CMyApp*)AfxGet-App();
app->MyGlobalVariable=…
用这个方法,不但可以定义全局变量,也可以定义全局对象。
例如:
MyClass MyObject;
CMyApp*app=(CMyApp*)AfxGet-App();
app->MyObject.MyFunction();
VC中使用全局变量的2种办法及防错措施
1. 对于全局变量存在和函数一样的问题,为了在其他CPP文件中能够访问这些变量,必须在主文件的H文件中加上extern声明,格式如下:
extern varibletype var; (声明)
在主文件的CPP文件中定义
varibletype var; (定义)
例子:
AppWizard建立一个Test工程
那么在Test.h中声明extern CString cs;
在Test.app定义CString cs;
如果要定义整个工程的全局变量,在任何一个CPP文件中进行定义,然后在需要引用这个变量的文件中进行声明。如全局变量很多可以选择使用定义全局变量的。h文件,在需要的地方直接include头文件即可,不需要写那么多extern了。
2.应用程序类的主头文件处定义变量varibletype var,然后,在程序的任何地方,都可以用下面的方法来访问该变量:
CClassApp *app=(CClassApp*)AfxGetApp();
app->var=
类似的,以上方法也可以定义全局对象
例子:
AppWizard建立一个Test工程
那么在Test.h中声明 CString cs;
使用的时候CTestApp *app=(CTestApp*)AfxGetApp();
app->cs="Global"
防错措施:
若定义的函数和全局变量在多个文件包含且造成嵌套或多次调用的话,这样将导致这个头文件每被包含依次,函数或变量就被重新定义一次,在链接编译时会导致重定义错误。为此需要使用一种被称为Guard macro的技术来保证不出错。在一个头文件开头加上
#ifndef _MACRO_1_
#define _MACRO_1_
在文件末尾增加
#endif
分享到:
相关推荐
VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量...
介绍VC++中的全局变量的定义和用法,建立良好编程习惯,慎用全局变量。
本文件描述了在MFC下如何定义全局变量和全局函数,这样所有的对话框均可放到到。
Hook编程。如何安装钩子过程,如何编写全局钩子,动态连接库里的全局变量数据共享问题分析。ADO数据库编程。在VB中利用ADO控件和ADO对象访问数据库,在VC中利用ADO技术访问数据库。
Hook编程。如何安装钩子过程,如何编写全局钩子,动态连接库里的全局变量数据共享问题分析。ADO数据库编程。在VB中利用ADO控件和ADO对象访问数据库,在VC中利用ADO技术访问数据库。
1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。...1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。
本篇文章是对VC中创建DLL,导出全局变量,函数和类进行了详细的分析介绍,需要的朋友参考下
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。
一个,链接时的错误,主要是重复定义变量等。 编译单元指在编译阶段生成的每个obj文件。 一个obj文件是一个编译单元。 一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元。 一个工程由很多编译...
使用vc开发mfc程序时,在调用了win32 dll(即不使用mfc的dll)时,mfc90.dll后于win32dll加载,在退出程序时mfc90.dll先释放,这时它会将win32dll中的全局变量,函数static变量视为内存泄露,而实际上随后win32dll...
VC hook基于钩子的原理屏蔽键盘任意按键,为了使用方便,生成一个标准的DLL,利用底层键盘钩子实现...keycode 数组保存在全局变量中,可设置是否屏蔽整个键盘。源码实例中并包括了VB6.0中调用此DLL进行键盘屏蔽的示例。
(1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件...
其中使用一个ALL_BUFFER结构的全局变量来连接两个进程,使用关键代码段来保持这两个进程的互斥。 ALL_BUFFER结构中有100个指向char的指针,当然这个100可以更改。 当接受到图片后,把当前图片保存在的buffer复制到...
VC正确打开关闭一个线程,运用信号量,以前喜欢运用BOOL全局变量关闭,但老有Bug。
之前的那个只能黑白画图,调试了很久,终于明白,getdc不能保存为全局变量,因为getdc即使在同一个类中得到dc也不一样。。。。代码实现后,能进行彩色双缓冲绘制,记住:不要保存getdc的全局变量,没用的,只会引起...
我画图使用的是画直线的方式(LineTo()),先定义一个全局变量用来保存采集的数据值,在画图函数OnPaint()中用这个全局变量来作为纵坐标,等分的120个点作为横坐标,那么就有120个点,最后用直线将这120个点连接...
里面展示了多线程进度百分比,用到了全局变量,通用性强。
//关于游戏的全局变量 BOOL hit,get POINT pos //木锤位置 int forewidth, foreheight //前台页面的宽度和高度 RECT backrect //后台页面映射矩形 int backwidth, backheight //后台页面的宽度和高度 int ...
VC6.0的MFC类库中文手册!该MFC参考含盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容。