Почему 0 (ноль) печатается без начального «0x» с форматом C printf «% # x»?

Предыстория: у меня есть несколько сценариев, которые анализируют файлы журнала в поисках шестнадцатеричных чисел, находя начальный "0x". Наша встроенная библиотека C заменена на новую printf. Новый printf больше соответствует стандартам, чем наш предыдущий, и мои скрипты сломались.

В системе Linux:

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

Вывод (с использованием glibc):

0000000000
0x00000001

Вывод на нашей прошивке был:

0x00000000
0x00000001

Из printf (3), на символе флага '#': «Для преобразований x и X к ненулевому результату добавляется строка« 0x »(или« 0X »для преобразований X).»

Мне любопытно почему . Не копаясь в документах стандартов C и не покупая обед для членов комитета по стандартам, почему бы не поставить 0x в начале аргумента с нулевым значением?

28
задан Keith Thompson 15 December 2011 в 00:04
поделиться