반응형
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
반응형
'IT이야기' 카테고리의 다른 글
어떻게 cypress에 nuxt 앱vuex점을 노출하기 위해? (0) | 2022.07.24 |
---|---|
Vuex 맵 상태가 정의되지 않음 상태 (0) | 2022.07.24 |
스태틱 함수에 C의 프로토타입에 static 키워드가 필요합니까? (0) | 2022.07.24 |
후드 아래에서 예외는 어떻게 구현됩니까? (0) | 2022.07.23 |
'int main(){return(0); }'의 부동소수점 예외(SIGFPE) (0) | 2022.07.23 |