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 |
댓글