Можете ли вы иметь в C аргументы переменной длины с функциями, когда вы не хотите передавать какую-либо переменную?
Да.В современном C, Code не может определять ...
функцию без аргументов, но вы можете вызвать такую функцию без аргументов, объявив функцию без сигнатуры функции.Таким образом, функцию можно вызывать с нулевыми аргументами.
Функция все еще нуждается в некотором способе понимания количества аргументов.Это часто делается с первым аргументом в виде счетчика (или формат ) или последним аргументом в качестве сторожа.
Учитывая "будет передано только char*
" ...
int foo_count(int counter, ...);
// zero usage example
foo_count(0);
int foo_sentinel(char *s);
// zero usage example
foo_sentinel((char*) NULL);
Чтобы сделать это с передачей аргументов no , счет должен передаваться другим способом, возможно, с помощью глобальной переменной - хотя это не рекомендуется.(Лучше просто передать счет.)
Объявить функцию:
int foo_count;
int foo(); // no prototype
Вызов функция
foo_count = 0; foo()
foo_count = 1; foo("one")
foo_count = 2; foo("one", "two")
Определить функцию
int foo(char *s1, ...) {
if (foo_count > 0) {
va_list ap;
va_start(ap, s1);
puts(s1);
for (int i=1; i < foo_count; i++) {
puts(va_arg(ap, char *));
}
va_end(ap);
}
}