티스토리 뷰
● std::ios_base::sync_with_stdio(false);의 의미
C++의 표준 스트림들이 C의 표준 스크림들과 동기화를 할 것인지 설정해준다.
std::ios_base::sync_with_stdio(false);
● 설명
C++의 표준 스트림들이 C의 표준 스크림들은 기본적으로 서로 동기화 되어있다.
즉, C++ 스트림이 자신의 버퍼를 사용하지 않고 C 스트림의 버퍼를 사용할 수 있다. 그렇기 때문에 우리가 아는 C언어의 입출력함수를 C++에서 사용해도 별 문제 없이 동작하는 것이다.
동기화를 끄면
- 만약 동기화를 끈 상태에서 C의 입출력함수와 C++의 입출력함수를 섞어서 사용하면 코드의 순서와는 다르게 결과가 섞여서 출력될 수 있다. (C++은 자기 스트림내의 버퍼로 데이터를 이동시키면서 연산을 수행하고, C도 자기 스트림 내의 버퍼로 데이터를 이동시키면서 연산을 수행하기 때문) 따라서 동기화를 하지 않을 경우, 표준 스트림을 사용하는 함수는 C++과 C함수를 섞어 쓰지 않는 것이 좋다. (ex. 출력으로 cout을 쓰면 printf는 쓰지 않는 것이 좋다. )
- 동기화를 끄면 C++ 의 표준 스트림들은 각각의 입출력 연산을 할 때 각각의 스트림내의 버퍼를 사용하게 될 것이다. 그러면 입출력 연산 속도는 크게 향상될 것이다.
동기화를 하지 않았을 때 순서가 섞인다는 것을 예시를 들어서 설명하자면
#include <iostream>
int main(){
std::ios_base::sync_with_stdio(false);
std::cout << "C++'s cout 1\n";
std::printf(" C's printf\n");
std::cout << "C++'s cout 2\n";
return 0;
}
다음과 같은 코드가 있을 때, 우리가 생각했을 때는 출력값이
C++'s cout 1
C's printf
C++'s cout 2
이렇게 차례대로 나와야한다. 그러나 동기화를 끄면 C의 출력 함수인 printf의 데이터 "C's printf" 라는 문자열은 C 출력스트림 내의 버퍼를 통해 전달되고, 처리된다. 그리고 C++의 출력 함수인 cout의 데이터 "C++'s cout1"과 "C++'s cout2"는 C++ 출력스트림 내의 버퍼를 통해 전달되고, 처리된다. 따라서 같은 스트림을 사용하는 "C++'s cout1"와 "C++'s cout2"는 당연히 코드의 순서대로 1이 먼저, 그다음에 2가 출력되겠지만 C 스트림버퍼를 사용하는 "C's printf"는 코드 순서와 다르게 출력될 수 있다.
<!-- 우리가 의도한 결과 -->
C++'s cout 1
C's printf
C++'s cout 2
<!--동기화를 하지 않았을 때 나올 수 있는 결과1-->
C's printf
C++'s cout 1
C++'s cout 2
<!--동기화를 하지 않았을 때 나올 수 있는 결과2-->
C++'s cout 1
C's printf
C++'s cout 2
<!--동기화를 하지 않았을 때 나올 수 있는 결과3-->
C++'s cout 1
C++'s cout 2
C's printf
'C++' 카테고리의 다른 글
[C++] 직접 정의한 헤더파일 사용해보기 (네임스페이스와 클래스) (0) | 2022.02.11 |
---|---|
[C++] 헤더 파일과 네임스페이스 (0) | 2022.02.09 |
[C++] 배열 초기화하는 방법 (0) | 2022.02.03 |
[C++] 표준 입력함수와 입력버퍼 관리 : cin / cin.getline / getline / cin.get / cin.fail / cin.clear / cin.ignore (0) | 2022.02.03 |
[C++] 배열 초과 입력에 관하여 (0) | 2022.02.02 |
- Total
- Today
- Yesterday
- ubuntu
- flutterdoctor
- DevExpress
- 트리
- 컨셉때문에킹받으셨나요..죄송합니다..제가 봐도 킹받네요
- Tree
- ()
- Unity
- QO
- apt
- =
- Winform
- Flutter
- VS Code
- Query
- select
- GIT
- androidstudio
- 우분투
- VirtualBox
- multiple Column
- 해마코딩
- 버추얼박스
- mac unity vscode autocomplete
- DataSource
- Unity vs code
- gridContorl
- mac Unity vscode 자동완성
- apt-get
- Mac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |