¿Cuál es la diferencia entre estática int a e int a?

Posible duplicado:
Diferencia entre ‘global’ y ‘estática global’

¿Cuál es la diferencia entre las afirmaciones 1 y 2:

#include  //In the global declaration area static int a; // 1. int b; // 2. 

Gracias por la ayuda.

Una variable global static es local a la unidad de traducción en la que está definida. Entonces, si define static int a; en dos unidades de traducción diferentes, esto creará dos variables independientes. Si define una variable global no estática int b; en dos unidades de traducción, experimentará un error de vinculador (pero puede usar extern int b; en una de las dos unidades de traducción para indicar al vinculador que debe usar la variable global de la otra unidad de traducción).

Ambas son definiciones de variables, sin embargo, la palabra clave static aplicada a una variable en el “área de statement global” restringe esa variable global para que se vea solo en la unidad de traducción en la que está definida.

Ambos están en la memoria durante toda la vida del progtwig. La variable que se declara estática solo tiene scope en el archivo en el que se declara donde se puede acceder a la variable declarada sin estática desde otros archivos mediante una statement externa.

Fuente original – http://bytes.com/topic/c/answers/860211-global-variable-static-global-variable

static int a solo es accesible dentro de ese archivo. Se puede acceder a extern int b con extern int b desde un archivo diferente.

 static int a; int b; 

a tiene enlace interno. b tiene enlace externo.

C99 6.2.2

6.2.2 Vínculos de identificadores

  • 1) Un identi fi cador declarado en diferentes ámbitos o en el mismo ámbito más de una vez puede referirse al mismo objeto o función mediante un proceso llamado vinculación. Hay tres tipos de enlace: externo, interno y ninguno.

  • 2) En el conjunto de unidades de traducción y bibliotecas que constituyen un progtwig completo, cada statement de un identi fi cador particular con enlace externo denota el mismo objeto o función. Dentro de una unidad de traducción, cada statement de un identi fi cador con enlace interno denota el mismo objeto o función. Cada statement de un identi fi cador sin vínculo denota una entidad única.

  • 3) Si la statement de un identi fi cador de scope de archivo para un objeto o una función contiene el especi fi cador estático de la clase de almacenamiento, el identi fi cador tiene un enlace interno .

La vida de una variable estática se extiende a lo largo de la vida útil del progtwig. Sin embargo, las reglas de scope todavía se aplican.

Si define su variable estática fuera de un método (normalmente al comienzo de la clase), su variable estará disponible desde cualquier lugar dentro de esa clase.

No puedes cambiar el valor de estos objetos. Normalmente se utilizan para almacenar cosas como las claves API.