Cómo utilizar variables globales en C++Builder
(1). Si defino una variable en un archivo de encabezado común, ¿puedo usarla directamente en otras unidades? Como sigue:
//-----------------------------Globals.h--- --- -------------------------------
#ifndef GlobalsH
#define GlobalsH
//---------------------------------------- ----------------------------------
#include Classes.hpp
//------------------------------------------- -- --------------------------------
Nombre de usuario AnsiString;
/ / ----------------------- -------------------------- -- --------------------------
#endif
La respuesta es: tal vez. Lo que obtuviste El resultado es: siempre que hagas referencia al archivo de encabezado N veces, recibirás N+1 advertencias del compilador que te indicarán que la definición de la variable está duplicada. De hecho, puedes usar la variable en la unidad donde se hace referencia. , pero en Asignar un valor a esta variable en una unidad dará como resultado un valor en otra unidad, es decir, la variable no es una variable global en absoluto, y el compilador maneja esto redeclarando una variable con ese nombre en cada unidad. .
(2). Si declaro una variable en el archivo del proyecto cpp, ¿puedo usar la variable directamente en otras unidades? Como sigue:
//-------------------------------- --------------------------------------
#incluir vcl.h p>
#pragma hdrstop
//------------------------------- -- ------------------------------------
USEFORM("TMainForm. cpp" , MainForm);
//----------------------------------- -- --------------------------------
Nombre de usuario AnsiString;
/ /---------------------------------- ------------- ----- --------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
pruebe
{
Aplicación-Initialize();
Aplicación-CreateForm(__classid(TMainForm), MainForm);
Application-Run();
}
catch ...// Omitido aquí
return 0;
}
//-------------------------------- ---------- --------------------------
La respuesta es no. Pero esta es de hecho una de las formas correctas de definir variables globales. Una variable se declara en el archivo del proyecto .cpp. Si desea usar la variable en otra unidad, debe usar la palabra clave extern para declarar que la variable es una variable externa, así que use extern AnsiString en la unidad que necesita usar. variable global. FileName hará referencia a esta variable global en un ejemplo.
(3) En la arquitectura VCL, a menudo usamos algunas variables globales. ¿Se da cuenta de que Aplicación, Pantalla, IsConsole, IsLibray, etc. son todas variables globales a nivel de aplicación? Para obtener más información, consulte la sección Información a nivel de aplicación en el manual de VCL. Entonces, ¿cómo se definen estas variables globales?
Atravesemos la niebla de VCL e ingresemos directamente al código VCL (el código fuente .pas no se puede ver directamente en C++Builder, pero el compilador generará un encabezado .hpp para cada archivo . pas, así que mire las declaraciones de variables y funciones que contiene): En un espacio en blanco del programa, escriba Aplicación, mantenga presionada la tecla Ctrl y luego haga clic en ella.
Al hacer clic nuevamente, encontraremos la definición original de la variable Aplicación de la siguiente manera:
//- var, const, procedimiento ------------------ -------- --------------------------
PAQUETE externo TApplication* Aplicación //ver; aquí
Pantalla EXTER PACKAGE TScreen*;
extern PACKAGE void *Ctl3DBtnWndProc;
Originalmente, VCL extendía la palabra clave extern en un archivo de encabezado .h o .hpp .
/- ----------------------------Globals.cpp---------- --------------------------
#pragma hdrstop
#include "Globals.h" p>
//----------------------------------------- ----- --------------------------
#paquete pragma(smart_init)
//-- --------------------------------------------- ------ ------------------
AnsiString UserName = "YinJiajun";
///-- ------- ----------------------- -------------------- --- ----------
//---------------------- -Globalesh---------------------------------
#ifndef GlobalsH p>
# define GlobalsH
//--------------------------------- --------- ----------------------------------
#include Clases .hpp
/ /------------------------------------ ------------- --------------------
PAQUETE externo AnsiString Nombre de usuario;
// --------- ------------------------------------- ------------- ----------
#endif
Epílogo: Las gambas nos dicen que no usemos demasiadas variables y no usar goto Entonces, cuando escribo Al programar, siempre resuena en mi mente esta frase: "No uses demasiadas variables globales, no uses goto". ¿Por qué no utilizar estas cosas? Porque es difícil de controlar. Si ya empuñaras una espada, ¿aún tendrías esas preocupaciones?
Los cuchillos se pueden utilizar para cortar verduras y matar personas. El hecho de que puedan matar personas no puede utilizarse para prohibir el uso de cuchillos.
Si el uso de variables globales hace que un programa sea más limpio y legible, ¿por qué no utilizarlas?
¿Por qué estos lenguajes de programación modernos todavía tienen que admitir variables goto y globales?