C/C++에서 printf()의 리턴값은 무엇일까요?

NAME

fprintf, printf, snprintf, sprintf - print formatted output

SYNOPSIS

#include <stdio.h>

int fprintf(FILE *restrict
stream, const char *restrict format, ...);
int printf(const char *restrict
format, ...);
int snprintf(char *restrict
s, size_t n,
       const char *restrict
format, ...);
int sprintf(char *restrict
s, const char *restrict format, ...);

The Open Group Base Specifications에서 살짝 업어온 printf() 계열 함수들의 용법입니다.

그런데, 리턴타입을 보면 void가 아니라 int입니다.
printf() 계열 함수들의 리턴값은 무엇일까요?

답 열기


대학원 다닐 때 한 수업 시간에 교수님께서 하신 질문이었습니다.
공교롭게도 (왜 그런 의문을 품었는지는 기억나지 않지만) 수업 며칠 전에 궁금해서 Solaris의 man page를 뒤져봤었습니다. 이걸 RTFM이라고 하죠... Read The F*cking Manual... 아니, Fine인가요? ^^;;

그래서 이 특이한 질문에 무난하게 대답할 수 있었습니다.

그러자, 교수님 말씀이...
그걸 도대체 어떻게 알고있어요?
하시더군요. 글쎄요... 왜 찾아봤을까요? printf() 함수를 사용하는 프로그래머의 0.00001%도 사용하지 않을 것을 말이죠...
Trackback 0 Comment 4
  1. ♡바다.. 2008.01.08 15:59 address edit & delete reply

    머 자세히는 모르겠지만..
    write 하는 넘의 기본이 아닐까?
    Serial 통신 하는 경우에도 Write 하는 넘이 실제로 얼마나 썼는지를 리턴 하니깐..
    printf 같은 경우는 일반적으로 예전에는 crt 상에 출력을 하는데..
    crt 가 없거나 혹은 video memory 가 없는 경우에 제대로 출력이 안되면 실제로 리턴되는 값이 작게 나오지 않을까?
    일반적으로 serial 같은 경우는 실제로 쓴 값의 리턴을 무지하게 중요시 하는데...
    그래야 버퍼가 찼을 경우 다시 기다렸다가 보내야 하니깐..
    printf 같은 경우도 그런 경우라 생각이 되는디..
    아참...
    글고 일반적으로 char[] 같은 경우는..
    printf 가 썼는디 실제 버퍼가 작을 경우는 써진 만큼의 값만 리턴이 됨..
    그럼 그거 보구 버퍼가 모자란다는 말을 할수 있지 않을까?

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2008.01.08 16:29 address edit & delete

      뭐, 이런 장난기 어린 글에 상세한 답변까지 달아주시나...
      사실 지금이야 메모리와 하드가 빵빵하니까 printf/fprintf 쓰면서 이런 고민 하는 사람 없지만, 예전 메모리가 모자라던 시절이나 OS를 만드는 사람들(즉, sprintf를 쓰는 사람들)에겐 당연히 너무나 필요한 기능이지...

  2. 지나가는 이 2008.01.20 08:50 address edit & delete reply

    사족입니다만... 리턴값이 아니라 리턴타입이 무엇이냐고 물어야 더 정확하지 않을까 싶습니다.
    리턴값은 그야말로 값이기 때문에 알 수가 없죠.
    그리고 작성자님이 대답하신 int는 그야말로 타입이지 값은 아닌거 같아서요... 그럼 즐거운 하루 되십시오.

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2008.01.20 13:24 address edit & delete

      아... 그런 면도 생각해봐야겠군요.
      좋은 지적 감사합니다.