가변 인자 함수
Programming/C 2013. 2. 15. 02:10 |가변 인자 함수(variadic function)
int printf(const char *format, ...); |
int scanf(const char *format, ...); |
printf 함수와 scanf함수의 원형를 예를 들어...
위의 원형에서 보면, 두 번째 매게 변수 선언이 "..."로 되어 있다. 이는 몇 개의 인자가 전달되건, 어떤 종류의 인자가 전달되건 개의치 않겠다는 선언이다.
따라서 printf와 scanf 함수의 선언은 첫 번째 인자로 반드시 문자열이 와야 하고(const char *format), 그 다음부터는 몇 개의 인자를 전달하건 상관하지 않겠다는 선언이다.
#include <stdio.h>
#include <stdarg.h> //가변 인자의 모든 함수 및 변수를 사용하기 위해서는 헤더 파일 stdarg.h를 포함해야 한다.
void va_fct(int a, ...);
main()
{
va_fct(1, 1); //첫 번째 인자는 가변 인자의 갯수 정보를 전달한다.
va_fct(2, 1, 2);
va_fct(3, 1, 2, 3);
return 0;
}
void va_fct(int a, ...)
{
int i;
va_list list; //list 포인터. (va_fct함수 호출 시 전달된 매개 변수를 가리키는 일종의 지시자.)
va_start(list, a); //list 포인터 초기화.
//(첫 번째 인자는 초기화할 va_list형 변수를, 두 번째 인자론 매개 변수로 전달된 첫 번째 인자를 전달.)
//(이 정보는 변수 list가 가변 인자의 첫 번째 요소를 정확히 가리키게 하기 위한 것.)
//※주의할 사항: 변수 list가 가리키는 첫 번째 인자라는 것이 메인함수에 있는 va_fct함수의 두 번째 인자이다.
for(i=0; i<a; i++)
printf("%d ", va_arg(list, int)); //va_arg함수를 호출하면서 변수 list를 인자로 전달하고 있다.
//이는 현재 list가 가리키고 있는 가변 인자를 반환하기 위한 것.
//두 번째 인자로는 가변 인자의 자료형 정보를 넘겨줘야만 한다.
//함수 호출이 완료되고 나면 변수 list는 다음 번 가변 인자를 가리키게 된다.
printf("\n");
va_end(list); //list 리셋. (가변 인자를 모두 참조했다면 반드시 거쳐야 하는 과정.)
}
'Programming > C' 카테고리의 다른 글
do~while문 (0) | 2013.02.15 |
---|---|
switch문의 적절한 예 (0) | 2013.02.15 |
수학 관련 함수 (0) | 2013.02.15 |
ftell 함수와 rewind 함수 (0) | 2013.02.15 |
2차원 배열 동적할당. (2) | 2013.02.15 |