Variable externa

Una variable externa és, en els llenguatges de programació C i C++, una variable declarada amb la paraula clau extern.

Camp d'aplicació

[modifica]

Depenent del context, el terme pot adquirir dos significats diferents. Quan es fa ús del terme per a la declaració d'una variable, extern fa saber al compilador que la variable es trobarà a la taula de símbols d'una altra unitat. S'utilitza per exposar variables pertanyents a un fitxer a un o més fitxers addicionals. La declaració externa no és traduïda pel compilador sinó per l'enllaçador, amb això extern és un mecanisme vàlid per instal·lar modularitat a nivell del compilador.

Quan s'utilitza el terme per a la instanciació d'una variable , extern trasllada la variable a la taula de símbols de la unitat de traducció de manera que el símbol pugui ser referenciat des d'altres unitats. Per a això ha d'haver una implementació de la variable marcada com extern en un altre lloc, normalment en el fitxer capçalera (header).

Dos usos importants de l'externalització són: evitar referències circulars (de l'estil de declaracions en seccions en llenguatges com Pascal) i evitar cadenes de dependències compilades.

Les variables externes es poden declarar al marge dels blocs de funcions, en un fitxer de codi font de la mateixa manera que es declara qualsevol altra variable, especificant el seu tipus i el seu nom. No s'usa cap especificador de classe d'emmagatzematge, la posició de la declaració del fitxer indica la classe d'emmagatzematge extern. La memòria per a aquestes variables s'assigna quan el programa comença a ser executat i roman assignat fins a l'acabament d'aquest. Per a la majoria d'implementacions en C, cada byte de memòria assignat per una variable externa s'inicialitza a zero.

L'àmbit de les variables externes és global, és a dir, tot el codi font al fitxer després de les declaracions. Totes les funcions que segueixen a la declaració poden accedir a la variable externa fent servir el seu nom. No obstant això, si es declara una variable local amb el mateix nom, les referències al nom accedeixen a la cèl·lula de la variable local.

Exemple ( C )

[modifica]

fitxer 1:

 int VariableGlobal;//definició
 void una funció (void);//declaració externa implícita

 int main (){
 VariableGlobal = 1;
 Una funció ();
 return 0;
 }

fitxer 2:

 extern int VariableGlobal;//declaració externa

 void una funció (void){
 ++VariableGlobal;
 }

En aquest exemple la variable VariableGlobal és definida al fitxer 1. Per utilitzar la mateixa variable al fitxer 2, ha de ser declarada usant la paraula clau extern . Independentment de la quantitat de fitxers, una variable global només es defineix una vegada, però ha de ser declarada usant extern en qualsevol fitxer a part d'aquell que conté la definició. Tècnicament, una funció és també externa, però en C i en C++ totes les funcions es consideren externes de forma predeterminada i normalment no necessiten ser declarades.

Referències

[modifica]

Enllaços externs

[modifica]
  • (VS.80). Aspx Microsoft C Language Reference: The extern Storage-Class Specifier
  •  PDF. En especial, les seccions 6.2.2 (Linkage of identifiers), 6.2.4 (Storage duration of objects), 6.7.1 (Storage-class specifiers) i 6.9 (External definitions).