Фон: у меня есть несколько скриптов, которые анализируют файлы журналов, которые ищут шестнадцатеричные числа, находя ведущий "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), добавленная к ней".
Мне любопытно, почему. Не копаясь в документах стандартов С или покупая обед для членов комитета по стандартам, почему бы не привести 0x к аргументу с нулевым значением?