'가변 인자 함수'에 해당되는 글 1건

  1. 2013.02.15 가변 인자 함수

가변 인자 함수

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
Posted by scii
: