2011-09-16 2 views
0

fprintf가 상속하기 때문에 fprintf(stderr, "Error occured with file %s\n", file);의 fprintf 호출을 vfprintf(FILE * stream, const char * format, va_list arg)으로 바꾸고 싶습니다. vfprintf를 사용하여 래퍼 함수를 ​​작성하지 않고도이 작업을 수행 할 수 있습니까? 어떻게 든 va_list 인수를 생성합니까?래퍼 함수없이 vfprintf 사용?

+2

'fprintf' 그렇게 "상속 fprintf와 부풀게는"한 vfprintf 실제로 그 자체로 vfprintf''의 매우 얇은 래퍼입니다. 그렇지 않으면 부 풀기가 정확히 무엇인지 설명해야합니다. –

+0

나는 그것을 몰랐다. 고마워. 나는 다이어그램에 대한 코드를 링크하고 있는데, 컴파일 할 때 printf가 부풀어 오를 때 경고한다.'/opt/diet/lib-x86_64/libc.a(vfprintf.o) : 함수 \'vfprintf '에서 : (.text + 0x2e) : 경고 : 경고 : printf 함수는 몇 킬로바이트의 부 풀을 추가합니다 .' 부 풀기가 적고 경고가 없으면 어떤 해결책이 있습니까? – thpetrus

+0

"bloat"은'vfprintf'를 포함하여 전체 printf 계열에서 나온 것입니다. 이것을 피하는 유일한 방법은 문자열 포맷팅 함수를 전혀 사용하지 않는 것입니다. – duskwuff

답변

0

위의 설명에서 실제로 printf 계열의 기능을 완전히 피하는 것 같습니다. 이 경우

, 당신은이 라인을 따라 뭔가를 사용할 수 있습니다

fputs("Error occured with file ", stderr); 
fputs(file, stderr); 
fputc('\n', stderr);