¿Cómo C maneja los literales enteros con ceros iniciales y qué pasa con atoi?

Cuando creas un entero con ceros iniciales, ¿cómo lo maneja c? ¿Es diferente para diferentes versiones de C?

En mi caso, parece que se han caído (pero tal vez eso es lo que hace printf?):

#include <stdio.h>

int main() {
    int a = 005;
    printf("%i\n", a);
    return 0;
}

Sé que puedo usar printf to pad con 0s, pero me pregunto cómo funciona esto.

Respuestas a la pregunta(8)

Su respuesta a la pregunta