가변인자를 string 으로 사용하기

less than 1 minute read

C/C++에는 함수의 인자를 가변으로 다룰 수 있도록 되어있는데 이 때 사용하는 것이 va_list, va_start, va_arg, va_end 이렇게 네가지 함수다. 네가지 함수에 대한 설명은 이미 인터넷에 많이 나와있다. 그런데 이 가변인자를 문자열 형태로 사용하려고 하면 문제가 많아서 이를 테스트하는 코드를 만들었다.

void Test(const char* types, ...)
{
    va_list ap;

    va_start(ap, types);

    while (types)
    {
        // std::cout << code :  << types << std::endl;
        types = va_arg(ap, const char*);
    }

    va_end(ap);
}

#define Test(...) Test(__VA_ARGS__, NULL)

int main()
{
    Test(A123, A234, A345);

    return 0;
}

가변인자로 넣을 때는 std::string 으로 하려고 했으나 이 타입이 먹히지 않아 const char* 로 받아야한다. 중간에 define 으로 함수와 같은 이름의 매크로를 선언하고 가변인자의 맨 뒤에 NULL 을 넣어주도록 했는데 이게 없다면 가변인자의 맨 끝을 알 수 없어서 문제가 생기게 된다.


참고

Categories:

Updated:

Leave a comment