Подтвердить что ты не робот

Вызывает ли printf избыточные аргументы undefined?

Интересно, дает ли это поведение undefined:

printf("Test %d %s", 123, "abc", "def", "ghi");

Первые два аргумента после строки формата соответствуют строке формата, поэтому все в порядке; но третий и четвертый аргументы превышают, потому что больше нет соответствующих спецификаторов формата.

IMHO printf() должен просто игнорировать эти избыточные аргументы и не должно быть UB. Правильно ли это?

4b9b3361

Ответ 1

Да, этот сценарий явно определен стандартом. Это поведение не undefined.

Чтобы процитировать стандарт C11, глава §7.21.6.1, функция fprintf()

[...] Если формат исчерпан, а аргументы остаются, оцениваются лишние аргументы (как всегда) , но в противном случае игнорируются [...]

Ответ 2

В принципе, printf (или любая функция форматирования) будет рассматривать только "n" число% d,% c,% f... и т.д. в строке формата из аргумента списка переменных. Другие просто игнорируются.