В С99 для семейства функций printf() и scanf() предусмотрена новая возможность: они могут манипулировать с типами данных long long int и unsigned long long int. Модификатором формата для long long является ll. Например, в следующем фрагменте показано, как выводить значения типа long long int и unsigned long long int:
long long int val;
unsigned long long int u_val;
printf("%lld %llu", val, u_val);
Модификатор ll можно применять к спецификаторам формата: d, i, о, u и x — как для printf(), так и для scanf().
В С99 добавлен модификатор hh, который применяется для указания char-аргумента вместе со спецификаторами формата: d, i, о, u и x.
Оба модификатора, ll и hh, можно использовать также вместе со спецификатором n.
Спецификаторы формата a и A, которые были добавлены к printf(), заставляют выводить значение с плавающей точкой в шестнадцатеричном формате. Формат значения получается следующий:
[-]0xh.hhhhp+d
Если используется А, то x и p будут выводиться на верхнем регистре. Спецификаторы формата a и A были также добавлены к scanf() и они читают значение с плавающей точкой.
В С99 разрешается при вызове printf() к спецификатору %f добавлять модификатор l (тогда получится %lf), но от этого нет никакой пользы[1]. В С89 %lf для printf() не определяется.
[1]Иногда есть: если строка формата используется и для других целей.