在中使用全局变量计划
(1).如果我在一个公用的头文件中定义一个变量,在其它单元中可以直接使用它吗?如下:
//Globals.h
#ifndef GlobalsH
#define GlobalsH
//#include
//
AnsiString UserName;
//
#endif
答案是:或许可以吧。你得到的结果是:只要你引用了这个头文件N次,那么就会得到N+1次编译器警告,选择你这个变量重复定义,在你引用这个变量的单元中,确实可以使用这个变量,但是在一个单元中对它赋值,在另一个单元中确得不么,也就是说,它根本就不是全局的,编译器的处理方法是,在每个单元中重新以这个名称声明了一个变量而已。
(2).如果我在工程文件.cpp中声明一个变量,在其它单元中可以直接使用它吗?如下:
//
#include
#pragma hdrstop
//
USEFORM(\"p\", 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
3月15日历来是衣柜等家居商家凸显诚信精神、树立品牌形象 extern PACKAGE TApplication* Application; //请看这里
extern PACKAGE TScreen* Screen;
extern PACKAGE void *Ctl3DBtnWndProc;
原来VCL扩展了extern关键字,在.h或.hpp头文件用extern PACKAGE来输出本来在.cpp和.pas单元中定义的变量,使之成为全局变量,因此,我们得到了第三种声明全局变量的方法:使用extern PACKAGE关键字,如下,输出一个全局变量:
//p
#pragma hdrstop
#include \"Globals.h\"
//
#pragma package(smart_init)
//
AnsiString UserName = \"YinJiajun\";
//
//Globals.h
#ifndef GlobalsH
#define GlobalsH
//
#include
//extern PACKAGE AnsiString UserName;
//
#endif
查看本文来源
西宁治疗白癜风哪好宝宝消化不良的症状
类风湿关节炎患者怎么缓解
- 上一页:在类里调用物业
- 下一页:在中利用数组名和指针进行排序的例子覆盖
-
国家环保部:对进口到港化肥及硫磺等化肥生产原料优先接卸
4月19日下午,国家政府工业发展推行委以召开4下半年财经发表会。 发表会上...
2023-09-12
-
蒸螃蟹,用冷水还是热水?老当地人教你一招,不掉腿不流黄,没腥味
水煮蛤蜊,用水后还是冷凝?据传渔民在教你一招,就让脖子不逆麟,不曾苦...
2023-09-09
-
帝陵地宫,连现代技术都无法挖掘,究竟隐藏着哪些未解之谜?
在此之后的“七星内中”现象,引发了人们的热议。不少欧美网民都说,自己...
2023-09-06
-
【完整版】2022年二建《水利技术性》考试真题及答案解析(2天考3科)
2022年二建《水电原则上工程行政与原则上》考生短时间:6月12日上午9:00-12...
2023-09-05
-
上交所就修改纪律处分、初审和听证3项业务规则公开征求意见
香港交易所(简称作“深交所”)免职、检察院和质问3项的业务的系统将迎...
2023-09-01
-
@一孩二孩三孩的仔,这堂课很有料,专家面对面教你怎么带娃
孩童 日常医疗 双亲校外6月末主题教学 不少新手爸妈常常感慨 陪伴糖果要学...
2023-08-31