У меня есть задача перекодировки printf с большей частью его функциональности (на C). Однако при выполнении некоторых тестов я обнаружил проблему: я не понимаю, как работает стандартная функция, когда пользователь ставит более одного модификатора (разрешенные модификаторы - h, hh, l, ll, z и j).
Например:Флаги и модификаторы printf в C
printf("%hhld", 128) results in 128 printed out;
printf("%lhhd", 128) results in 128 printed out;
printf("%lhhd", 9223372036854775807) shows 9223372036854775807;
printf("%lhhd", 9223372036854775808) shows -9223372036854775808;
printf("%hhld", 9223372036854775807) shows 9223372036854775807;
printf("%hhld", 9223372036854775808) shows -9223372036854775808;
Что модификатор будет выбран и как Printf выбрать его? Почему это всегда игнорируется в этой ситуации?
Другой вопрос: должен ли мой printf работать с флагами и модификаторами в случайном порядке или нет? Потому что в вики, статья упоминает определенный порядок:
% [параметр] [флаги] [ширина] [. Точность] [длина] Тип
Вы бы так любезны объяснить это мне или определить точную линию в человеке? Я читал его несколько раз и до сих пор не вижу ответа на мой вопрос. – kjioyh
В документах, связанных ответом выше в разделе «* Модификатор длины *», фраза «* Следующее целочисленное преобразование соответствует ... *» может быть прочитана как «Использовать этот модификатор длины только с ...». Ваш код делает не соответствуют этим правилам. И при этом вызывает неопределенное поведение. – alk