Многоточие в списке параметров пользовательской функции используется тогда, когда число аргументов заранее неизвестно. При этом неопределенное количество параметров можно указать в ее прототипе следующим образом:
void f1(int a, double b, …);
Такая запись указывает компилятору на то, что за обязательными фактическими аргументами для параметров a и b могут следовать, а могут и не следовать другие аргументы при вызове этой функции.
Перечислим основные особенности использования данного механизма.
1. Используется несколько макрокоманд для доступа к параметрам таких функций, это:
va_list и va_start – макрокоманды подготовки доступа к параметрам;
va_arg – использование параметров;
va_end – отчистка перед выходом.
Они объявлены в заголовочном файле stdarg.h.
2. Такая функция должна иметь минимум один параметр (именованный) для передачи ей количества передаваемых аргументов.
3. Для макроса va_start необходимо передать два аргумента – имя списка параметров, который задает va_list и их количество.
4. Нарушать указанный порядок макрокоманд нельзя. Иначе можно получить непредсказуемые последствия.
5. Для макроса va_arg нужно помимо имени списка параметров передать и предполагаемый тип. При несоответствии типов – ошибка.
Использование многоточий полностью выключает проверку типов параметров. Многоточие необходимо, только если изменяются и число параметров, и их тип.