프로그래밍/C++

가변인자 사용하기

호군 2010. 11. 12. 00:59
반응형

가변인자란? 이름 그대로 "변화가 가능한 인자"라는 뜻입니다.
인자는 함수에 전달하는 값이며, 매개변수라고도 불립니다.

가변인자를 사용한 함수의 예를 보자면,
처음 C를 입문하게 되면 printf()함수를 사용하여 "Hello, World!" 부터 시작하게 됩니다.
이 printf() 함수가 가변인자를 사용한 함수입니다. 또한 scanf() 함수 또한 마찬가지 입니다.

t가변인자를 쉽게 사용하기 위해 제공되는 매크로가 있습니다.
va_list args;
va_start(ap, v)
va_arg(ap, t)
va_end(ap)
만약 이 매크로를 사용하지 않으면 그와 같이 동작하는 코드를 구현해야겠죠?
한번 해보시는것도 좋겠지만, 어렵게 길을 돌아갈 필요는 없을 듯합니다.
그리고 va_list는 char* 를 typedef한 자료형입니다. 그럼 가변인자의 사용 방법을 알아 봅니다.

- 소스코드

void PrintInt(int nCount, ...)
{
    va_list args;
    int * rgArray = new int[nCount];

    va_start(args, nCount);
 
    for(int i = 0 ; i < nCount ; i++)
    rgArray[i] = va_arg(args, int);

    va_end(args);

    for(int i = 0 ; i < nCount ; i++)
    printf("%d ", rgArray[i]);
    printf("\n");
}
int main(int argc, char* argv[])
{
    PrintInt(3, 10, 20, 30); 
    return 0;
}




아래의 내용은 가변인자에 대한 고뇌(?)라고 할까요? 어떤분께서 작성 하신 글을 퍼왔습니다.
전 단순히 사용 방법만 알아봤지만, 이분은 사용하시다 오류를 내셨습니다.
그리고 다른 분께서 그 이유를 댓글로 적어주셨구요. 오류는 역시 사람을 생각하게 하네요.
원글의 링크도 남기니 직접 들려서 보셔도 됩니다.


- 추가 내용

반응형