5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VSCodeで利用するC++のバージョンを初心者が変更する

Last updated at Posted at 2022-03-10

この記事の概要(動機と目標)

  • 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なるものが出てきたのだが,

a.cpp
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に以下を追記する。

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のみによる設定ができた。

  1. Shift+Command+Pでコマンドパレットをひらく
  2. C/C++: Edit Configurations (UI) を選択
  3. 下の方にある C++標準c++14 を選択

以上の設定により,編集,コンパイルともC++14で行うことができるようになった。

まとめ

  1. settings.jsonに追記することでCode Runnerの設定を行う
  2. コマンドパレットでEdit Configurations (UI)を選択しC/C++の設定を行う
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?