Если функция была написана для переменного числа аргументов (например, printf
), то можно передать переменное количество аргументов функции.
Они работают с любым из двух шаблонов
Шаблон карты
Как и printf, ранний необязательный параметр описывает остальные параметры, которые были добавлены. Затем они соответственно извлекаются из стека.
Завершающий шаблон
Можно написать функцию для суммирования набора параметров, которые имеют некоторый механизм для обнаружения терминатора.
int sum( int first_arg, ... );
Если к функции добавлен специальный токен для правильного вызова.
Если функция была написана, чтобы принимать только фиксированное количество аргументов, вы должны передать это количество аргументов.
Это потому, что вызывающий код и вызываемый код должны согласовать, сколько стека используется. Любая разница в этом контракте приведет к неопределенному поведению, которое может привести к сбою, или ваша программа может быть использована злоумышленником.
Учитывая, что функция имеет заданное количество параметров, вам необходимо предоставить все из них.