블로그는 나의 힘!
[ Programing ]/C++2010. 1. 30. 01:28
가변인자란?
인자의 개수가 늘었다 줄었다 할 수 있는 함수를 작성할 수 있도록 도와주는 것.
※ 인자의 개수 뿐만 아니라 인자의 type도 상관 없다.

가변인자의 핵심
#include <stdarg.h>

void va_start( va_list list, last );
type va_arg( va_list list, type );
void va_end( va_list list );



void va_start( va_list list, last );
va_start() 함수는 list를 초기화.
va_list는 typedef void *va_list다. 즉, void*


type va_arg( va_list list, type );
고정 인자를 제외한 나머지 인자들을 얻기 위하여 사용.
보통 for()문을 이용하여 처리하며, va_arg()를 사용할 때 마다 list 포인터는 하나씩 증가
type은 인자 type으로 지정하면 된다.

void va_end( va_list list );
가변 인자의 사용을 끝낼 때 사용.




정리...
int function( int count, ... )
{
    va_list list;
    int nSum = 0;

    va_start( list, count );
    for( int i = 0; i < count; i++ )
         nSum += va_arg( list, int );

    va_end( list );

    return nSum;
}


※ 주의점 : va_start()는 하나 이상의 고정인자 필요하며, 함수는 가변 인자( ... )만으로 선언할 수 없으니, 하나 이상의 고정 인자가 필요.



참고 서적 : [정보문화사] 다시 체계적으로 배우는 C언어 포인터

To be continue... [Private]
Posted by Mister_Q