Я уверен, что если вы действительно хотели, вы могли бы попытаться применить какую-то схему, при которой функция с переменным числом аргументов принимает только определенный тип параметра (например, список целых чисел), а затем вы заполняете некоторую глобальную переменную, указывающую, сколько целых ты прошел.
Ваши два примера не являются переменными функциями. Они являются функциями с двумя аргументами, но они также выделяют аналогичную проблему. Как узнать размер массива C без дополнительной информации? Вы можете либо передать размер массива, либо описать схему с некоторым значением часового, обозначающим конец массива (т. Е. '\ 0' для строки C).
Как в случае с переменным числом, так и в случае с массивом у вас одна и та же проблема. Как узнать, к какому количеству данных вы имеете законный доступ? Если вы не знаете этого в случае с массивом, вы выйдете за пределы. Если вы не знаете этого в случае с переменным числом, вы будете вызывать va_arg слишком много раз или с неправильным типом.
Чтобы перевернуть вопрос, как бы вы могли реализовать функцию, принимающую переменное число аргументов без передачи дополнительной информации?