반응형
bits/stdc++.h 헤더파일은 무엇일까?
백준 온라인 저지, HackerRank, LeetCode, codeforces 등과 같은 알고리즘 문제 풀이 사이트나 코딩 연습 사이트 등을 보면 #include <bits/stdc++.h>
파일을 볼 수 있다.
간단하게 말하면 모든 표준 헤더 파일이 포함된 헤더 파일이다. 코딩 문제를 풀 때, 특히 알고리즘 문제를 푸는 대회에 나간 경우 문제를 푸는 속도가 순위에 영향을 주는 경우가 많다. 이런 경우에 일일이 헤더 파일이 입력하는 것이 시간 낭비가 될 수 있다. 따라서 bits/stdc++.h
한 번만 입력하면 되므로 많은 시간을 절약할 수 있다.
모든 헤더 파일을 기억하지 않아도 된다는 장점과 시간 절약을 할 수 있다는 장점이 있다.
하지만 단점 또한 존재한다. 쓰지 않는 헤더 파일 또한 포함시키므로 불필요하게 프로그램 크기가 커지고, 헤더 파일이 많은 만큼 컴파일 시간 또한 길어진다.
그럼 헤더파일의 실제 내용은 무엇일까?
우분투에서 한 번 살펴 보자.
리눅스에서는 다음 경로를 통해 헤더파일을 확인할 수 있다./usr/include/x86_64-linux-gnu/c++/7/bits
경로를 보면 stdc++.h
파일이 있다.
// C++ includes used for precompiling -*- C++ -*-
// Copyright (C) 2003-2013 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file stdc++.h
* This is an implementation file for a precompiled header.
*/
// 17.4.1.2 Headers
// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
반응형
댓글