[팁|TIP] 맥OS에서 bits/stdc++.h 사용하기
알고리즘 공부/알고리즘과 자료구조

[팁|TIP] 맥OS에서 bits/stdc++.h 사용하기

이번에 새롭게 알고리즘을 공부할 각오를 다지며 책을 샀는데, 첫 장에 떡하니 #include <bits/stdc++.h>가 있더라고요.

사실 이 헤더가 존재하고, 알고리즘 사이트와 대회에서 지원되는 경우가 많다고 들어서 전에 쓰려고 했다가 MacOS에서는 자동으로 설치되는 헤더가 아니라서 쓰려고 해도 헤더파일을 못찾는다고 나오더라고요.

그래서 어떻게 추가하는지 찾아보니 Xcode의 헤더파일 폴더 안에 넣는 방법이 가장 많이 떠서 이 방법을 시도해봤는데 여전히 헤더파일이 없다고 해서 2시간 정도의 학교 동아리 시간을 날렸습니다.

그러다가 유튜브를 찾아보니 /usr/local/include에 bits라는 폴더를 만들고 그 안에 stdc++.h 파일을 넣으라는 영상을 찾았습니다.

이 방법은 실행해보니까 인식은 하는 것 같은데 굉장히 긴 에러 메세지가 출력되서 순간 매우 당황했습니다.

그런데 에러 메세지를 보니까 제가 아까 Xcode 안에 있는 stdc++.h를 찾고 있더라고요?

확인해보니 제가 /usr/local/include/bits에 넣을때 Xcode의 헤더를 끌어와서 복사가 아닌 참조로 저장되어 있었는데 제가 Xcode 쪽 헤더를 그 뒤에 바로 지워버려서 없는 파일에 참조해서 에러가 나던 것이더라고요.

그래서 다시 파일을 만들고 실행해보니 잘 되었습니다.

순서:

*참고: 저는 Xcode와 homebrew가 설치되어 있으며 homebrew를 통해 gcc가 설치되어진 상태입니다.

**원래 중간에 using namespace std;가 아래 텍스트에 있는데 컴파일러에서 경고가 뜨길래(아마 두 번 선언해서 그런거 같아요) 지웠습니다.

  1. 터미널을 통해 cd /usr/local/include를 쳐서 해당 경로로 들어갑니다.
  2. mkdir bits를 통해 bits라는 폴더를 생성합니다.
  3. touch stdc++.h를 쳐서 stdc++.h라는 파일을 생성합니다.
  4. 원하는 에디터를 통해 아래 텍스트를 넣은 다음 저장하면 바로 사용할 수 있습니다
// 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 <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

이렇게 생겼습니다.