Как функция C узнает, какой из них является последним параметром? Он не может знать априори , сколько существует параметров. Нужна дополнительная информация. Один из распространенных способов получения нужной информации для функций - это анализ включенного строкового параметра для подсчета спецификаторов формата, как в printf
. В этом случае, если строка формата указывает только на наличие одного дополнительного параметра, функция не знает разницы между вызовом, в котором действительно был только один дополнительный параметр, и вызовом, в котором было два, или вызовом, в котором было 20. Функция должна иметь самодисциплину для чтения только одного параметра, так как это все строка формата, которая там была. Чтение большего количества приведет к неопределенному поведению.
Если то, что я описал, не работает так, как работает ваша функция, то на вызывающем конце вы мало что можете сделать для ее решения. Но если означает , как работает ваша функция, то на вызывающей стороне ничего не будет до , потому что проблем нет.
Другой вариант, поскольку вы указываете, что ваш «устаревший код завершается ошибкой при нулевых значениях», заключается в исправлении устаревшего кода, чтобы он больше не давал сбоев.
Третий вариант - просто написать все четыре варианта:
if (a != null) {
if (b != null)
return myFunc(name, a, b);
else
return myFunc(name, a);
} else {
if (b != null)
return myFunc(names, b);
else
return myFunc(names);
}
Более двух необязательных параметров, и код начинает становиться громоздким.