가령 정수들의 합을 계산하는 함수가 있는데, 각 정수를 인자로 받고 있어요.
int sum(int a, int b, int c);
근데 내가 인자를 2개만 주고 싶고, 5개도 주고 싶어요. 어짜피 인자들의 합을 계산하는건데, 굳이 고정적일 필요가 있냐는 이야기에요.
이를 위해서, c언어에서는 가변 인자 함수를 지원해요. 실제로 printf, scanf 같은 경우 변환 명세에 따라 인자의 개수가 다른데, 이는 가변 인자를 사용해 구현되었어요. 앞서 이야기했던 정수의 합을 계산하는 함수를 가변인자로 만들어볼게요.
#include <stdio.h>
#include <stdarg.h> // 가변 인자 함수를 만들기 위해 필요해요.
int sum(int cnt, ...);
int main(void)
{
printf("1 + 2 + 3 = %d\n", sum(3, 1, 2, 3));
printf("1 + 2 + 3 + 4 + 5 = %d\n", sum(5, 1, 2, 3, 4, 5));
printf("1 = %d\n", sum(1, 1));
return 0;
}
int sum(int cnt, ...)
{
va_list ap;
int total = 0;
va_start(ap, cnt);
for (int i = 0; i < cnt; i++)
{
total += va_arg(ap, int);
}
va_end(ap);
return total;
}