Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una variable declarada con el especificador de clase de almacenamiento de extern es una referencia a una variable con el mismo nombre definido en el nivel externo en los archivos de código fuente cualquiera de los del programa.La declaración interna de extern se utiliza para crear el externo-nivel la definición de variable visible dentro del bloque.A menos que está declarada de otra manera en el nivel externo, una variable declarada con la palabra clave de extern está visible únicamente en el bloque en el que se declara.
Ejemplo
Este ejemplo muestra declaraciones internas y de externo-nivel:
// extern_StorageClassSpecified.c
#include <stdio.h>
void other( void );
int main()
{
// Reference to i, defined below:
extern int i;
// Initial value is zero; a is visible only within main:
static int a;
// b is stored in a register, if possible:
register int b = 0;
// Default storage class is auto:
int c = 0;
// Values printed are 1, 0, 0, 0:
printf_s( "%d\n%d\n%d\n%d\n", i, a, b, c );
other();
return;
}
int i = 1;
void other( void )
{
// Address of global i assigned to pointer variable:
static int *external_i = &i;
// i is redefined; global i no longer visible:
int i = 16;
// This a is visible only within the other function:
static int a = 2;
a += 2;
// Values printed are 16, 4, and 1:
printf_s( "%d\n%d\n%d\n", i, a, *external_i );
}
En este ejemplo, i variable se define en el nivel externo con el valor inicial 1.Una declaración de extern en función de main se utiliza para declarar una referencia al externo-nivel i.Estáticaa variable se inicializa en 0 de forma predeterminada, ya que se omite el inicializador.la llamada a printf imprime los valores 1, 0, 0, y 0.
En función de other , utilice la dirección de la variable global i para inicializar la variable de puntero external_ide Estática .Esto funciona porque la variable global tiene duración de Estática , lo que significa que la dirección no cambia durante la ejecución del programa.A continuación, la variable i se define como una variable local con el valor inicial de 16.Esta redefinición no afecta al valor del externo-nivel i, que está oculto por el uso del nombre de la variable local.El valor de i global es accesible ahora sólo indirectamente dentro de este bloque, a través del puntero external_i.Al intentar asignar la dirección de Autoi variable a un puntero no funciona, ya que puede ser diferente el bloque se escribe cada vez.La variable a se declara como variable de Estática y se inicializa en 2.Este a no entra en conflicto con a en main, ya que las variables de Estática en el nivel interno son visibles desde dentro del bloque en el que se declaran.
La variable a se incrementa en 2, lo que da 4 como resultado.Si la función de other fuera denominada de nuevo en el mismo programa, el valor inicial de a sería 4.Las variables internas de Estática conservan sus valores a que termine el programa y después se repite el bloque en el que se declaran.
Vea también
Conceptos
Especificadores de clase de almacenamiento para las declaraciones de Interno- Nivel