Поведение Printf с нотацией $, когда последовательность аргументов не завершена - PullRequest
3 голосов
/ 20 июня 2019

Я работаю над собственной реализацией стандартной функции библиотеки языка C printf.В настоящее время я пытаюсь добавить (нестандартное) поведение, когда в нотации указывается номер аргумента ($).

В этом случае, если вы укажете 5 аргументов и только аргумент 1, 2 3 и 5 будутссылка в строке формата, так как аргументы хранятся в списке, полученном с помощью va_start, у меня есть проблема.Чтобы перейти к аргументу 5, мне нужно пропустить аргумент 4. Это означает, что мне придется вызывать va_arg для аргумента 4. Это означает, что мне нужно указать тип для аргумента 4, о котором у меня нет никакой информации.

Мой вопрос: какой тип данных использует printf в этой ситуации?Или, если это неизвестно, какой тип вы бы использовали?Я пробовал void, но va_arg не принимает его как тип данных (что имеет смысл).Я знаю, что все это неопределенное поведение, но я пытаюсь понять, как printf справляется с этим, поэтому любые идеи приветствуются!

1 Ответ

6 голосов
/ 20 июня 2019

какой тип данных использует printf в этой ситуации?

Это не так.printf ожидает, что используются все пронумерованные аргументы.Со страницы руководства :

В числах аргументов, указанных с помощью $, не должно быть пробелов;например, если указаны аргументы 1 и 3, аргумент 2 также должен быть указан где-то в строке формата.

Так что в вашем примере вполне допустимо предположить, что если на $5 есть ссылка встрока формата, в которой все предыдущие тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...