declarando variables sin ningún tipo de datos en c

En estoc programa

a=8;
main()
{
    printf("%d", a);
}   

la variable a ha sido declarada sin ningún tipo de datos y aún así este programa compila exitosamente y da el resultado deseado.
salida ::

8  

verlo enideone.
pero, cuando declaré la misma variable dentro de main, da error de compilación.

main()
{
     a=8;
    printf("%d", a);
}  

salida ::

prog.c:2: warning: return type defaults to ‘int’
prog.c: In function ‘main’:
prog.c:3: error: ‘a’ undeclared (first use in this function)
prog.c:3: error: (Each undeclared identifier is reported only once
prog.c:3: error: for each function it appears in.)
prog.c:4: warning: implicit declaration of function ‘printf’
prog.c:4: warning: incompatible implicit declaration of built-in function ‘printf’  

veraquí.

¿Cómo funciona el primer programa pero el segundo?

Respuestas a la pregunta(6)

Su respuesta a la pregunta