본문 바로가기
<CPP>/BASIC

4. 출력문

by CodeGrimie 2021. 1. 8.

CPP는 printf와 cout 둘 다 사용할 수 있다.

CPP에서 출력문은 C의 printf와 CPP의 cout 둘 다 가능하지만 CPP 표준에서는 cout 사용을 권장하고 있다.

 

▼ CPP의 두 가지 방식의 출력문

#include <cstdio>
#include <iostream>

int main()
{
    printf("This is C style code\n");
    std::cout << "This is CPP style code" << std::endl;
    
    return 0;
}

 

cout은 printf 보다 느린 게 아니다.

CPP가 C를 대체하기 위해서 만들어진 언어인 만큼 C의 기능들도 90% 이상 내장되어있다.

문제는 이 호환성 때문에 오히려 CPP가 cout으로 출력할 때 속도가 느려지는 경우가 발생한다.

 

프로그래머가 CPP에서 C의 <cstdio>에 내장된 입출력 함수를 사용할 수 있기 때문에 컴파일러는 내부적으로 항상 stdio buffer와 동기화하고 있다.

이 과정이 상당한 시간을 소모하기 때문에 보통 2배 정도의 시간이 걸린다.

 

그래서 같은 코드를 작성해도 출력 함수를 무엇을 쓰는지에 따라서 컴파일되는 시간이 달라지는 것이다.

안전성을 고려한다면 cstdio를 사용하라.

이 속도 차이를 해결하기 위해서 아래의 방법을 사용하면 해결할 수는 있다.

 

▼ stdio buffer 동기화 해제

#include <iostream>

int main()
{
    std::ios::sync_with_stdio(false);
    std::cout<<"Hello World\n";

    return 0;
}

std::ios::sync_with_stdio(false);는 함수 이름에서도 알 수 있듯이 stdio와 동기화를 해제하는 함수다.

CPP는 독자적인 버퍼만 사용하기 때문에 속도가 빨라질 수 있다.

 

문제는 이 함수가 컴파일러에 따라 간혹 에러를 발생하기도 한다는 것이다.

치명적인 이슈이기 때문에 코딩테스트를 한다거나 안전성을 중요시할 때는 <cstdio>를 사용하는 것이 좋다.

 

참고로 CPP의 endl 역시 내부적으로 버퍼를 비우는 과정이 들어가서 \n 보다 느리다.

C는 불편하지만 속도 최적화에 유리한 면이 많다.

'<CPP> > BASIC' 카테고리의 다른 글

6. 한글 출력  (0) 2021.01.11
5. 정수  (0) 2021.01.08
3. 주석(Comment)  (0) 2021.01.08
2. 문장부호  (0) 2021.01.08
1. 괄호(Bracket)  (2) 2021.01.08

댓글