IT이야기

va_list를 사용한 printf 호출

cyworld 2022. 7. 24. 22:10
반응형

va_list를 사용한 printf 호출

void TestPrint(char* format, ...)
{
    va_list argList;

    va_start(argList, format);
    printf(format, argList);
    va_end(argList);
}


int main()
{
    TestPrint("Test print %s %d\n", "string", 55);
    return 0;
}

필요한 정보:

Test print string 55

사실, 쓰레기 배출물이 나오거든요이 코드에 무슨 문제가 있나요?

대신 사용하세요.

대신printf를 사용해 보는 것을 추천합니다.vprintf대신 다음과 같은 특정 목적을 위해 작성되었습니다.

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void errmsg( const char* format, ... )
{
    va_list arglist;

    printf( "Error: " );
    va_start( arglist, format );
    vprintf( format, arglist );
    va_end( arglist );
}

int main( void )
{
    errmsg( "%s %d %s", "Failed", 100, "times" );
    return EXIT_SUCCESS;
}

원천

다른 사람들이 이미 지적했듯이:이 경우 다음을 사용해야 합니다.vprintf대신.

하지만 정말 포장하고 싶다면printf또는 이 기능이 없는 기능을 래핑하고 싶다.v...버전에서는 GCC에서 비표준을 사용하여 이 작업을 수행할 수 있습니다.__builtin_apply특징 :

int myfunction(char *fmt, ...)
{
    void *arg = __builtin_apply_args();
    void *ret = __builtin_apply((void*)printf, arg, 100);
    __builtin_return(ret);
}

에 대한 마지막 주장__builtin_apply는 인수의 최대 합계 크기(바이트 단위)입니다.여기서 충분히 큰 값을 사용해야 합니다.

이 방법은 사용법이 아닙니다.printf()를 사용하고 싶은 경우va_lists,사용하다vprintf()대신.여기를 참고하세요.

언급URL : https://stackoverflow.com/questions/5977326/call-printf-using-va-list

반응형