Сначала ответ C ++.
Параметр по умолчанию - это параметр, для которого вы будете знать, что функция должна и будет видеть, как предусмотрено.Таким образом, вы должны окончательно назвать эти параметры и затем предоставить аргументы по умолчанию.Это будет «короткая» версия вашей функции.
Если в дополнение к этим заданным по умолчанию аргументам вы хотите иметь возможность иметь список аргументов va_arg
, просто перегрузите вашу функцию второй версией, которая делаетименно это.Для этой «длинной» версии вы все равно должны предоставить все аргументы, поэтому не имеет смысла иметь аргументы по умолчанию, здесь.
Теперь ответ C
Возможно, вы не рассматривали такиевещь, но с помощью va_arg
macro функций C99 можно определить аргументы по умолчанию для функций в C .Синтаксис макроса в этом случае является более разрешающим, чем для C ++, так как вы можете опустить аргументы в середине вызова функции, а не только в конце.Поэтому, если бы вы объявили вашу функцию как-то вроде
int toto(int a, ...)
и указали аргументы по умолчанию для позиций 2 и 3, скажем, вы могли бы назвать ее как
toto(4,5,,,37);
Так что в этом смысле вС этим можно сделать то, что вы просили.Я лично, конечно, не решился бы сделать это.