この記事の概要(動機と目標)
- C++ファイルの編集時やrun時(
code runner
を使用)に(おそらく)C++03が選択されていて,C++11以降の機能が使えない。 - 上記を解決することが目標。つまりC++11以降を使ってくれるように設定したい。今回は,なんとなくC++11の1つ後のC++14に設定していく。
環境
- OS:macOS Sierra (バージョン10.12.6)
- エディタ:Visual Studio Code (バージョン1.65.0)
- コンパイラ:Clang
- この記事に関わる拡張機能:
C/C++
,Code Runner
詳細な動機
競プロの勉強をしていて,auto
なるものが出てきたのだが,
auto a = 4;
と書いたら,明示的な型がありません('int'が想定されます) C/C++
と怒られた。
Code Runnerにて実行した際にも,'auto' type specifier is a C++11 extension
と言われた(実行自体は問題なくできた)ので調べてみると,auto
はC++11の機能らしい。
ところが,自分でターミナルからコンパイル・実行する際に,-std=c++11
とオプションをつければ問題なくC++11で実行してくれることから,問題の原因はVSCode(の拡張機能)にあると判断。
よって,C++に関する拡張機能:C/C++
とCode Runner
の設定を変更することで問題が解決すると思われる。
実際に設定を変更する
Code Runner
の設定
settings.json
に以下を追記する。
{
"clang.executable": "clang++",
"code-runner.runInTerminal": true,
"clang.cxxflags": [ "-std=c++14"],
"code-runner.executorMap": {
"javascript": "node",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ -O2 -std=c++14 $fileName && ./a.out",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"php": "php",
"python": "python -u",
"perl": "perl",
"perl6": "perl6",
"ruby": "ruby",
"go": "go run",
"lua": "lua",
"groovy": "groovy",
"powershell": "powershell -ExecutionPolicy ByPass -File",
"bat": "cmd /c",
"shellscript": "bash",
"fsharp": "fsi",
"csharp": "scriptcs",
"vbscript": "cscript //Nologo",
"typescript": "ts-node",
"coffeescript": "coffee",
"scala": "scala",
"swift": "swift",
"julia": "julia",
"crystal": "crystal",
"ocaml": "ocaml",
"r": "Rscript",
"applescript": "osascript",
"clojure": "lein exec",
"haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",
"racket": "racket",
"ahk": "autohotkey",
"autoit": "autoit3",
"dart": "dart",
"pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
"d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
"haskell": "runhaskell",
"nim": "nim compile --verbosity:0 --hints:off --run",
"lisp": "sbcl --script",
"kit": "kitc --run"
}
}
出所:C++で始める競プロ / VSCodeの環境構築(Mac)
たぶん,code-runner.executorMap
内の"cpp"
の項目がとくに重要で,Run Codeしたときにターミナルに打ち込んでくれるコマンドを指定しているのだと思う。
この中で-std=cpp14
というオプションを書いているため,C++14で実行してくれるようになる。-std=cpp11
とすれば,C++11で実行してくれるのだろう。
"clang.cxxflags"
が何をしているのかは,私には分かりませんすみません。
C/C++
の設定
これまでの設定で,実行は問題なくできるようになった。
が,エディタ画面では相変わらず拡張機能C/C++
(のIntelliSense(?)という機能らしい)がエラーを吐き出していて鬱陶しいことこの上ないので,こちらの設定も変更していく。
VSCode公式を参考にした。ただし,公式のドキュメントではなにやらc_cpp_properties.json
ファイルを直接編集しているが,今回の目的だけなら以下の方法でUIのみによる設定ができた。
-
Shift+Command+P
でコマンドパレットをひらく - C/C++: Edit Configurations (UI) を選択
- 下の方にある C++標準 で c++14 を選択
以上の設定により,編集,コンパイルともC++14で行うことができるようになった。
まとめ
-
settings.json
に追記することでCode Runner
の設定を行う - コマンドパレットで
Edit Configurations (UI)
を選択しC/C++
の設定を行う