В C функции, принимающие переменные аргументы (то есть параметр ...
), не могут заранее знать количество или тип аргументов. Их нужно как-то отслеживать. Отдельный параметр длины можно использовать только одним способом, но функции семейства printf
используют количество спецификаторов формата в строке формата для отслеживания.
Если вы скажете функции «эй, есть третий параметр», когдаВы не пропустите один, это неопределенное поведение. Все может случиться. Может показаться, что ничего не печатать. Он может прочитать значение мусора из ячейки памяти или из регистра, где он ожидает найти это значение. Может произойти сбой.
Рассуждение о том, что может произойти, когда ваш код вызывает неопределенное поведение, - пустая трата времени. Просто убедитесь, что ваш код свободен от него.