[C con Clase] persistencia

Steven Davidson srd4121 en njit.edu
Mar Feb 24 07:00:49 CET 2009


Hola Samuel,

Samuel Porras wrote:
> Buenos días,
> escribo a la lista para resolver un par de dudas sobre la
> persistencia en lenguaje C.
> 
> Estoy estudiando la persistencia automática y la persistencia
> estática, la persistencia automática tiene auto y register que se
> comportan de un modo determinado y la estatica permanece a lo largo
> de todo el programa, tanto en una como en otra, dicen
> identificadores, en las de persistencia automática dicen que solo se
> puede usar con variables automáticas y en la persistencia estática en
> la declaración de variables y de funciones.
> 
> La duda es:
> - static y extern se puede utilizar en funciones y variables, auto y 
> register solo en variables, no? o en las dos solo se utiliza en 
> variables, y de ser así

La primera parte de tu afirmación es correcta:
- Las variables pueden tener: auto, register, extern, o static.
- Las funciones pueden tener: extern, o static.

> ¿Qué utilidad tendría declarar static y extern una función?
> 

Indicar que una función es estática significa que su existencia o "vida" 
sólo pertenece al código fuente que la definió. Es decir, tal función 
tiene un ámbito de fichero. Por ejemplo,

// fuente1.c
static int func( int );
...

// fuente2.c
static void func( float[], int );
...

Las dos funciones 'func()' no guardan relación alguna y existen 
exclusivamente en su fichero fuente correspondiente.

Indicar 'extern' para una función no tiene mucho sentido, ya que por 
defecto su enlazado es externo y por tanto visible y compartido por 
otros ficheros fuentes.


En C++, existen otros usos y en el caso de variables y funciones 
miembros, 'static' tiene otro uso.


Espero haber aclarado la duda.

Steven





Más información sobre la lista de distribución Cconclase