함수 정의시 printf처럼 변수의 갯수가 일정하지 않을 때 사용하는 방법인 가변인자 함수 정의 방법을 알아본다.
간단하게 가변인자 만드는 샘플 몇개 소개!
1. 초간단 가변인자 함수
#include <stdarg.h>
int sum(int nargs, ...)
{
va_list argptr;
int i, total = 0;
va_start(argptr, nargs);
for (i = 0; i < nargs; i++)
total += va_arg(argptr, int);
va_end(argptr);
return total;
}2. 초간단 변형된 printf 함수
int my_printf(const char *fmt, ...)
{
va_list argptr;
int ret;
va_start(argptr, fmt);
ret = vprintf(fmt, argptr);
va_end(argptr);
return ret;
}3. 향상된 Error 처리 함수
void error(int status, int ecode, const char *fmt, ...)
{
va_list argptr;
fflush(stdout);
fprintf(stderr, "error: ");
if (ecode)
fprintf(stderr, "%s: ", strerror(ecode));
va_start(argptr, fmt);
vfprintf(stderr, fmt, argptr);
va_end(argptr);
fputc('\n', stderr);
fflush(stderr); /* redundant */
if (status)
exit(status);
}이건.. 예제..
#include <stdio.h>
#include <stdarg.h>
int add(int count, ...){
va_list list;
int sum = 0;
int i;
va_start(list, count);
for(i=0; i<count; i++)
sum += va_arg(list, int);
va_end(list);
return sum;
}
int main(){
int sum;
sum = add(2, 284, 945);
printf("%d\n", sum);
sum = add(5, 456, 74, 24, 826, 34);
printf("%d\n", sum);
return 0;
}