printf()와 std::cout

지금도 그런지는 모르겠지만 가정 처음 C를 접할 때 나오는 함수는 “Hello world”를 출력하기 위한 printf()이고, C++ 책에는 같은 기능을 보여 주기 위해 std::cout였다. C++를 배우려고 하는 사람들이 이전의 C와 가장 이질감을 가지는 부분이 이곳인데 시작하면서부터 C C++은 문자 하나 출력하는데도 이렇게 다른 것이구나 라고 생각하게 된다

그런데 나와 나의 주위를 보자면, C++을 사용하는 현업에서도 printf()를 썼으면 썼지 std::cout은 거의 사용하는 사람이 없다. iostream의 사용법이 C++ operator 재정의의 사용 철학을 알리기 위해서 지금처럼 ‘<<’‘>>’를 사용하게 되었다고 들은 적이 있다. 하지만 printf()의 다양한 format을 표현하기 위해서는 알아야 하는 함수(또는 template, 또는 functor)가 너무도 많다. 진수(radix)를 바꾸기 위한 방법도 그렇고 출력 시 고정폭을 지원하게 하는 방법도 너무 귀찮다. (물론 처음부터 C++로 시작한 사람은 그냥 그려러니 하고 사용할 것이다. 도리어 C format함수가 더 어려울지도 모르겠다

내가 가장 큰 문제라고 생각하는 것은 printf() 보다 직관적이지 못한 부분이 있기 때문이다.예를 들어 아래의 두 가지는 서로 결과가 다르다. 그냥 보면 둘 다 같은 결과가 나올 것 같은데 그렇지 못하다. std::cout에서 결과가 예상한 것과 다르게 나오는 것은 operator overloading 때문이다.

소스
#include <stdio.h>
#include <iostream>

int main()
{
char ch = '0';

// 1. printf() 버전
printf("%c\n", ch+0);
printf("%c\n", ch+1);
printf("%c\n", ch+2);

// 2. std::cout 버전
std::cout << ch+0 << std::endl;
std::cout << ch+1 << std::endl;
std::cout << ch+2 << std::endl;

return 0;
}

결과

0  <-- printf() 버전
1
2
48  <-- std::cout 버전
49
50



Posted by 안영기

2009/02/01 08:54 2009/02/01 08:54
Response
0 Trackbacks , 3 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/5

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

« Previous : 1 : ... 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : Next »

블로그 이미지

게임 개발을 기반으로 한, 잡다한 개발 기록 저장소

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Comments

Recent Trackbacks

Calendar

«   2024/04   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

Site Stats

Total hits:
236672
Today:
27
Yesterday:
72