¿Por qué se imprime 0 (cero) sin los principales "0x" con formato C printf "% # x"?

Background: Tengo una serie de scripts que analizan los archivos de registro en busca de números hexadecimales al encontrar el "0x" principal. Nuestra biblioteca C incrustada cambió a una nueva printf. El nuevo printf es más compatible con los estándares que nuestro anterior y mis scripts se rompieron.

En una caja de Linux:

#include <stdio.h>
int main( void )
{
    printf( "%#010x\n", 0 );
    printf( "%#010x\n", 1 );
    return 0;
}

Output (usando glibc) es:

0000000000
0x00000001

La salida de nuestro firmware fue:

0x00000000
0x00000001

Desde printf (3), en el carácter de marca '#': "Para las conversiones xy X, un resultado distinto de cero tiene la cadena" 0x "(o" 0X "para las conversiones X) antepuestas a ella".

Soy curiosopor qu. Sin profundizar en los documentos de estándares C o comprar almuerzo para los miembros del comité de estándares, ¿por qué no un 0x principal en un argumento de valor cero?

Respuestas a la pregunta(2)

Su respuesta a la pregunta