C variable arguments
- func 은 마지막 parameter 로 elipsis (...) 를 가져야 함
- 첫번째 parameter는 int를 가져야 함, 이는 total parameter 의 개수를 가지고 있음
- stdarg.h 파일을 Include 해야 함
ex) skeleton code
#include <stdarg.h>
int func(int, ... )
{
}
int main()
{
func(1,2,3);
func(1,2,3,4);
}
실제 사용 방법
- va_list type을 선언함
- va_start macro와 int parameter를 이용하여 전체 parameter 개수를 파악
.ex) va_start(valist, num);
- va_arg macro와 va_list를 이용하여 각 item 을 구할 수 있다.
.ex) va_arg(valist, int);
- va_end macro를 통해서 va_list를 clear 한다.
#include <stdio.h>
#include <stdarg.h>
double average(int num,...)
{
va_list valist;
double sum = 0.0;
int i;
/* initialize valist for num number of arguments */
va_start(valist, num);
/* access all the arguments assigned to valist */
for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);
}
/* clean memory reserved for valist */
va_end(valist);
return sum/num;
}
int main()
{
printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5)); /* 4개의 parameter(2,3,4,5)를 보냄 */
printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15)); /* 3개의 parameter(5,10,15)를 보냄 */
}