티스토리 뷰

반응형

여러 경쟁적 프로그래밍 대회나 답변들을 보면 <bits/stdc++.h>가 자주 쓰이는 것을 볼 수 있다.

또한, 나는 주렁주렁 여러 헤더를 달 동안, 옆의 사람은 간단히 하나의 헤더로 끝내는 것을 보면 괜히 부럽기도 한다.

 

대관절 <bits/stdc++.h>는 무엇을 하는 헤더인가?

 

1. bits/stdc++.h을 써야 하는 이유

한 마디로 말하면 다음과 같이 말할 수 있다.

 

C++ 문제해결을 여행하는 여행자들을 위한 종합 선물 세트

 

말 그대로 C++ 알고리즘 관련 코드에서 필요한 자료형들을 모~~~~두 담고 있다고 해도 무관하다.

 

실제, GCC 4.8.0의 <bits/stdc++.h>는 다음과 같이 헤더를 담고 있다.

 

이로 인하여, C++또는 C언어에서 #include <vector.h>, #include <limits.h>, #include <set.h>... 과 같이 필요한 자료형 혹은 함수 헤더 노가다를 하지 않아도 된다.

 

또한, 어느 함수가 어느 헤더에 있는지 고민할 필요 없이 그냥 가져다 사용하면 된다.

 

마치 든든한 서포터를 옆에 두고 게임을 하는 느낌이라고 할 수 있다.

 

2. bits/stdc++.h을 써야 하지 말아야 하는 이유

 

흔히 말하는 "야매, 꼼수" 만 사용하다 보면, 정석을 잊어 버리는 경우가 왕왕 있다.

 

1) 애초에 정식 표준 라이브러리가 아니다.

 

<bits/stdc++.h>의 이름에서 알 수 있듯이 bits라는 폴더 안에 있는 "stdc++.h" 라는 헤더를 가져다 쓰는것이다. 정식 헤더가 아닌, GCC 컴파일러에서 추가된 헤더이다. 따라서, GCC가 아닌 컴파일러에서는 수동으로 헤더를 추가하거나, 이 헤더를 빼고 정식 헤더로 바꾸어주어야 한다. (ex. MSVC, XCode...)

 

또한, GCC 컴파일러의 구조가 달라지면 이에 맞추여 헤더의 내용을 변경해주어야 할 수도 있다. 

 

C++ 프로그램이 어떤 환경에서 실행될 것인지 판단이 되지 않는다면 피하는 것이 좋다.

 

2) 느리다.

 

<bits/stdc++.h>가 필요한 대부분의 헤더를 담고있는 만큼, 불필요한 헤더까지 컴파일하는데 시간이 오래 걸린다. 이 점은 프로그램 실행 시간에 치명적이다.

 

다만, 이는 프로젝트에 따라 헤더 파일을 미리 컴파일하여 시간을 많이 단축시킬 수 있다. (Pre-compiled header)

 

3. 3줄 요약

 

1. 알고리즘 문제해결에서는 사용하면 아주 나이스하고 코딩 인생이 행복해진다.

2. 다만, 실제 개발환경에서는 쓰지 말자.

3. <bits/stdc++.h> 많이 애용해주자.

 

도움이 되었다면 지나가는 길에 하트 하나 눌러주세요, 양질의 글을 쓰는데 하나의 동기부여가 됩니다😍

지적이나 오타 수정 댓글 환영합니다!!

반응형
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
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
글 보관함