Соблюдается стандартный синтаксис C / C ++ . Таким образом,% d и% i оба представляют собой «целое число со знаком»,% f означает «десятичное число с плавающей запятой» и будет отображать числа с плавающей запятой или двойные числа.
Не зная, почему d и i дублируются, причина того, что% f действительно плавает и удваивается, состоит в том, что на вещи, переданные с помощью многоточия, распространяются правила продвижения C. Если вы передадите какой-либо целочисленный тип, меньший чем int, он будет переведен в полноразмерный тип int для передачи. Точно так же, если вы передадите поплавок, он будет повышен до двойного. Таким образом, объект, получающий аргументы, просто должен думать о целых числах по сравнению с плавающей запятой, а не о размере хранилища.