본문 바로가기

C-Language/Variable Arguments

Variable Arguments in C language

C 언어에서 가변인자(Variable Arguments) 함수 사용하기


함수를 선언할 때 그 아규먼트의 수가 정해지지 않고 프로그램이 작동 중일 때 결정되는 경우가 있다. 이와 같이 함수의 파라미터 수를 개발시에 결정할 수 없을 경우에는 가변인자 함수를 선언하면 실행시에 다양한 갯수의 아규먼트가 전달되더라도 처리할 수 있게 된다

C 언어에서는 가변인자 함수를 위해 stdarh.h 헤더파일과 그 안에 선언된 va_list, va_start, va_end, va_arg 등의 매크로를 지원하고 있다

가변인자 함수 선언

int sum(int, ...);

파라미터를 선언할 때는 첫 번째 파라미터의 자료형은 반드시 int 이어야 하고, 뒤 이어서 3개의 점을 입력하면 된다

첫번째 정수 파라미터(int)는 아규먼트의 수를 전달하는 역할을 한다


가변인자로 전달된 다수개의 숫자를 합산하여 리턴하는 예

#include <stdio.h>
#include <stdarg.h>

int sum(int cnt, ...); // 가변인자를 가진 함수 선언

int main()
{
	int total = sum(4, 1, 2, 3, 4);
	printf("합계:%d \n", total);  // 10

	return 0;
}

// 가변인자 함수 정의
int sum(int cnt, ...) { // 가변인자 함수 선언

	va_list valist;	// 가변인자를 모두 저장할 변수 선언
	int total = 0;

	va_start(valist, cnt); // valist 에 cnt 개의 값을 초기화함

	int i;
	for (i = 0; i < cnt; i++) {
		total += va_arg(valist, int); // valist 에 저장된 가변인자를 한개씩 추출하여 합산
	}
	va_end(valist); // valist 에 사용된 메모리를 해제한다

	return total;
}