¿Existe una garantía de stdout auto-flush antes de salir? ¿Como funciona?

Aquí está el código (válido C y C ++)

#include <stdio.h>

int main() {
    printf("asfd");
    // LINE 1
    return 0;
}

Si en la línea 1 pongo la expresión de seguridad, el programa simplemente se bloquearía sin imprimir nada (como se esperaba).

Pero, ¿por qué el código anterior se imprime "asdf" y no sale sin que se vacíe el búfer? ¿Qué hay debajo del capó y por qué funciona como se espera?

Respuestas a la pregunta(3)

Su respuesta a la pregunta