Вызывает ли printf избыточные аргументы undefined?
Интересно, дает ли это поведение undefined:
printf("Test %d %s", 123, "abc", "def", "ghi");
Первые два аргумента после строки формата соответствуют строке формата, поэтому все в порядке; но третий и четвертый аргументы превышают, потому что больше нет соответствующих спецификаторов формата.
IMHO printf()
должен просто игнорировать эти избыточные аргументы и не должно быть UB. Правильно ли это?
Ответы
Ответ 1
Да, этот сценарий явно определен стандартом. Это поведение не undefined.
Чтобы процитировать стандарт C11
, глава §7.21.6.1, функция fprintf()
[...] Если формат исчерпан, а аргументы остаются, оцениваются лишние аргументы (как всегда) , но в противном случае игнорируются [...]
Ответ 2
В принципе, printf (или любая функция форматирования) будет рассматривать только "n" число% d,% c,% f... и т.д. в строке формата из аргумента списка переменных. Другие просто игнорируются.