본문 바로가기
프로그래밍/C++

가변인자 사용하기

by 호군 2010. 11. 12.
반응형

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

가변인자를 사용한 함수의 예를 보자면,
처음 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;
}




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


- 추가 내용

반응형