科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件在C++Builder中使用全局变量

在C++Builder中使用全局变量

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文详细解释了如何在C++Builder中使用全局变量。

作者:yifei(尹加俊) 来源:http://www.myideas.cn/homepage/index.php?option=c. 2007年9月15日

关键字: C++ Builder 全局变量 软件

  • 评论
  • 分享微博
  • 分享邮件

(1).如果我在一个公用的头文件中定义一个变量,在其它单元中可以直接使用它吗?如下:

//Globals.h 

 #ifndef GlobalsH

#define GlobalsH

//#include

//

AnsiString UserName;

//

#endif

答案是:或许可以吧。你得到的结果是:只要你引用了这个头文件N次,那么就会得到N+1次编译器警告,选择你这个变量重复定义,在你引用这个变量的单元中,确实可以使用这个变量,但是在一个单元中对它赋值,在另一个单元中确得不么,也就是说,它根本就不是全局的,编译器的处理方法是,在每个单元中重新以这个名称声明了一个变量而已。

(2).如果我在工程文件.cpp中声明一个变量,在其它单元中可以直接使用它吗?如下:

//

#include

#pragma hdrstop

//

USEFORM("TMainForm.cpp", MainForm);

//

AnsiString UserName;

//WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TMainForm), &MainForm);

Application->Run();

}

catch ... //这里省略了一部分

return 0;

}

//

不可以。但是这确实是定义全局变量的正确方法之一。在工程文件.cpp中声明了变量,如果想在其它单元中使用它,必须使用extern关键字,来声明这个变量是外部的,所以,在需要使用这个全局变量的单元中,使用extern AnsiString FileName就可以引用一例中的全局变量了。

(3).在VCL架构的程序中,我们经常用到一些全局变量,你有没有意识到呢?Application、Screen、IsConsole、IsLibray...等都是应用程序级的全局变量,如果想了解更多,请参照VCL手册的application-level information有关的章节。那么,这些全局变量是如何定义的呢?

我们揭开VCL的迷雾,直接去查看VCL的代码(C++Builder中无法直接看到.pas的源代码,但是编译器为每个.pas文件生成了一个.hpp的头文件引用,看看其中的变量和函数声明即可):在程序空白处输入Application,按住Ctrl键,再点击它,我们就找到了Application变量的原始定义,如下:

//-- var, const, procedure

extern PACKAGE TApplication* Application; //请看这里

extern PACKAGE TScreen* Screen;

extern PACKAGE void *Ctl3DBtnWndProc;

原来VCL扩展了extern关键字,在.h或.hpp头文件用extern PACKAGE来输出本来在.cpp和.pas单元中定义的变量,使之成为全局变量,因此,我们得到了第三种声明全局变量的方法:使用extern PACKAGE关键字,如下,输出一个全局变量:

//Globals.cpp

#pragma hdrstop

#include "Globals.h"

//

#pragma package(smart_init)

//

AnsiString UserName = "YinJiajun";

//

//Globals.h

#ifndef GlobalsH

#define GlobalsH

//

#include

//extern PACKAGE AnsiString UserName;

//

 #endif

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章