
글을 쓰게 된 이유
정말 지긋지긋했다. coderunner, cpp 설정을 계속 바꿔도 안됬어서 노션에 적어가며 시도했었지만 일단 코테 문제를 푸는게 중요해서 stdc++을 안 쓰고 관련 헤더를 다 include 해서 사용했었다.
구글링에서는 단편적인 사례밖에 안 나오고, 그마저도 적용해도 다른 문제점들이 있어서 그런지 해결이 아예 안됬다.
결론은 완전하게 해결했고, 목차에서 관련 문제점을 찾아서 보거나 처음부터 보면서 검사하면서 체크해보세요(관심과 좋아요는 글을 더 쓰게 만듭니다)
환경 :
cmd+r로 실행하려고 사용)
지금은 오류가 없어 보이는데, 원래 1번째 줄에 빨간 물결 표시로 include path 오류가 있다고 나왔다.
c_cpp_properties.json에 추가
여기서 installedDir 부분을 c_cpp_properties.json includePath에 추가하면 됨.
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/Library/Developer/CommandLineTools/usr/bin"
],
"defines": [
"/Zc:__cplusplus=201703L"
],
"macFrameworkPath": [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm64"
}
],
"version": 4
}
설정 들어가는 방법 : cmd+shift+p 에서 저기 들어가서 c/c++ : select configuration 클릭 -> json 으로 보기 클릭.

결과 : 물결 사라짐.
stdc++.h가 해결됬다고 올린 글 중에서 stdc++.h만 include 한게 아니라, iostream도 include한게 있었다. iostream을 include한걸 정리한 걸 까먹거나 해결이 안될 확률이 크다. (다른거 include 안하려고 stdc++.h 쓰는건데..)
stdc++.h 안에서 오류 표시가 났다는 건 stdc++.h를 잘못 복사했다고 생각해서 다시 복붙했다.
clang --version 을 콘솔에 입력해서 나온 includepath에서 bin 폴더 전에 include/bits 폴더 들어가서 stdc++.h 만들어서 하면 됨.

vi stdc++.h 입력해서 vim으로 띄워서 :%d로 모든 내용 지우고 a 입력해서 복붙하고 :wq 로 저장하고 나오면 됨.
#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
결과 : cout, queue, vector 등을 include 안해도 됨

이런 식으로 initializer_list가 없다고 하는데, 복붙한 stdc++.h 파일에는 저 부분이 있었다.

if __cplusplus >= .. 부분이 뭔지 검색했더니 저 버전 이후에서는 아래 헤더가 포함된다는 말 이고, 201103L이 c++11 이었다.
그 전까지는 include가 적용이 되니까 컴파일러 버전 문제가 의심이 됬다. 코테 보는 프로그래머스 사전 테스트에서 처봤을때는 c++17 이어서 똑같이 환경 설정을 해도 된다고 판단하고 진행함.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); // cin.tie(0);
cout << "__cplusplus value: " << __cplusplus << endl;
auto i = 1;
cout<<i<<'\n';
return 0;
}

아니나 다를까 버전 c++11, c++17이 아니었음
체크 1
: 맥북 컴파일러의 clang 버전 확인

14.0.3 버전은 C++17 을 지원함.
판단 1
: 맥북 컴파일러는 C++17 지원 하는데, vscode에서 실행할때 일부러 낮춰서 실행하는 중.
체크 2
: c_cpp_propertis.json으로 c/c++ 확장 프로그램 설정 확인

c++17로 잘 되어있는거 확인
판단 2
: 중간에 다른 설정이 바꾸는 중인듯.

coderunnner 설정을 수정했더니 됨.

아무거나 설정에서 settings.json으로 편집 클릭해서 들어가서 c++ 검색하기.

g++과 $fileName 사이에 -std=c++17 넣어주면 됨.

드디어 201703으로 바뀜.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); // cin.tie(0);
cout << "__cplusplus value: " << __cplusplus << endl;
auto i = 1;
cout<<i<<'\n';
for(int nv : { 2, 4, 5 }) {
cout<<nv<<endl;
}
return 0;
}
실행하니까 nv 부분도 에러 발생 x.
여담 : task.json 에서 stdc++ 추가해도 안 바뀜. coderunner 설정에서 추가하면 task.json 설정 건드리지 않아도 잘 돌아감
<- 이렇게 넣어서 해결했다는 글 봤는데 나는 그래도 안됬음.