Если вы называете свою переменную функцию следующим образом:
int result = sum(5 /*count*/, 1, 2, 3, 4, 5);
, добавляя начальное значение 5
(число), она будет делать то, что вы ожидаете, но для интереса попробуйте вызвать ее с большейномер (скажем, 6 или 10) и посмотрим, что произойдет. Их легко ошибиться.
Практически единственный хороший случай для функций с переменными значениями - это варианты printf, адаптированные для вашего приложения. Мой давний фаворит - die()
, который принимает строку формата printf (и аргументы), отправляет ее на стандартную ошибку, добавляет новую строку, затем выходит из программы.
#include <stdlib.h>
#include <stdarg.h>
void die(const char *format, ...)
{
va_list args;
va_start(args, format);
vprintf(stderr, format, args);
va_end(args);
fprintf(stderr, "\n");
exit(EXIT_FAILURE);
}
и затем помещает это вВаши заголовочные файлы, чтобы использовать его:
extern void die(const char *format, ...)
__attribute__((noexit)) // function never exits
__attribute__((printf(1, 2))); // looks like printf, format is arg1
Теперь вы можете позвонить die("Program failed because %s", reason);
, и программа будет работать без особой суеты. А благодаря использованию __attribute__
компилятор (по крайней мере, GNU) знает, как проверить параметры в строке формата.