如何在C++Builder中使用全局变量?
(1).如果我在一个公用的头文件中定义一个变量,在其它单元中可以直接使用它吗?如下:
//--------------------------------Globals.h----------------------------------
#ifndef GlobalsH
#define GlobalsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
AnsiString UserName;
//---------------------------------------------------------------------------
#endif
答案是:或许可以吧。你得到的结果是:只要你引用了这个头文件N次,那么就会得到N+1次编译器警告,选择你这个变量重复定义,在你引用这个变量的单元中,确实可以使用这个变量,但是在一个单元中对它赋值,在另一个单元中确得不么,也就是说,它根本就不是全局的,编译器的处理方法是,在每个单元中重新以这个名称声明了一个变量而已。
(2).如果我在工程文件.cpp中声明一个变量,在其它单元中可以直接使用它吗?如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM(\"TMainForm.cpp\", MainForm);
//---------------------------------------------------------------------------
AnsiString UserName;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
AnsiString UserName = \"YinJiajun\";
//---------------------------------------------------------------------------
//-----------------------------Globals.h-------------------------------------
#ifndef GlobalsH
#define GlobalsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
extern PACKAGE AnsiString UserName;
//---------------------------------------------------------------------------
#endif
后记:大虾们都告诉我们,不要使用太多的全局变量,不要使用goto......于是,当你写程序时,总是有这样的声明在我们脑中回响:“不要使用太多的全局变量,不要使用goto......”。为什么不要使用这些东西?因为难以驾驭。如果你已剑气合一,是否还有这样的顾虑?