¿Por qué no puedo asignar valores a variables globales fuera de una función en C?

Suponga que tengo una variable global y quiero asignarle otra variable. Descubrí que puede asignar otro valor a una variable global dentro de una función:

int i = 8;

int main(void)
{
  i = 9;     /* Modifies i */
  return 0;
}

Sin embargo, la asignación de la variable global fuera de una función no funciona!

int i = 8;

i = 9;  /* Compiler error */

int main(void)
{
  return 0;
}

Recibo el siguiente mensaje de error:

warning: data definition has no type or storage class
warning: type defaults to 'int' in declaration of 'i'
  error: redefinition of 'i'
note: previous definition of 'i' was here
int i = 8;
    ^

¿Por qué está pasando esto

Respuestas a la pregunta(1)

Su respuesta a la pregunta