4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VS Codeで最強のC/C++環境を作りたい

Last updated at Posted at 2025-02-09

始めに

C/C++でプログラミングをやるには、その文法の難しさやさまざまな知識を要求されることもそうなんですが、第一にコンパイルする大変さがあります。

ましてや、ちゃんとコンパイルできるとこまでたどり着けても、やはり

  1. 編集
  2. コンパイル
  3. 実行
  4. 目的の結果が得られるまで1から3を繰り返す

というのは結構めんどくさいです。

そこで、少しでも楽にこれを回せる環境を作ろうと思います。

理解ってる人へ

本稿の目的はビルドとデバッグを高速で回すことです。ある程度開発やってる人はmake使ってるかと思いますがこれとはやることがちょっと違って、ごく小さなプログラムを多数配置する、たとえば学校の課題をこなしたり、AtCoderやAOJを解いていったりするのを想定しています。

目標

  1. コードを書く
    image1.png
  2. コンパイル(F5キーを押すだけで自動でコンパイル&実行)
    image2.png
  3. デバッグも!(コードの実行中に変数の中身などを見ることができたり、変更できたりする。)
    image3.png

いろいろカスタマイズしているので、UIが多少違うのはご承知おきください。

要件

Windows11の人向け。あとちょっと時間かかります。

わからん用語とかはググってどうにかしてね★

準備

  1. WSLをinstall
  2. Ubuntuを設定
  3. vscodeと連携

この辺りはいろいろ解説が出てるのでそちらを参照してください。

設定の仕方

ひとまずWindows TerminalからUbuntuを開き、適当なプロジェクトを作ります。

$ mkdir project
$ cd project
$ code .

次に、このrepositoryをcloneして、READMEどおりに配置してください。

具体的には、terminal(vscodeでctrl+@を押下すると画面下部に表示されます)を開き、以下のコマンドを打ってください。

$ pwd
/home/<user name>/project // 一応ちゃんと指定したディレクトリにいるか確認してください
$ git clone https://github.com/Desert-sabaku/vscode_cpp.git
$ mv vscode_cpp .vscode

これで設定は完了です。

gitコマンドがねえよ!と言われた人は、次を実行してください。

$ sudo apt install git

使い方

適切に配置できていれば、このような感じになります。

projectExample.png

さて、適当なCのファイルを作り、キーボード上部にあるF5を押下してください。

runningExample.png

自動で実行、コンパイルしてくれます。

また、デバッガーも扱うことができます。

debug.png

画像のように行番号をクリックして"break point"を貼ってやり(画像では8行目)、この状態で実行してやると、8行目でプログラムが一時停止、この時点での変数の中身が見られます。

F5を連打してカウンター用の変数iや和を保存する用の変数sumの値が変化していくさまが左側のバーにある"Run and Debug"のタブから確認できます。

デバッグについての詳細などは、以下を参照してください。

説明

大まかな仕組みについてざっくりと解説しておきます。

ファイル名 役割
launch.json デバッグ実行のための基本設定を記述するファイル
tasks.json 実行時に具体的にどのような命令を実行するかを記述するファイル
c_cpp_properties.json CやC++のバージョンやパスなどの情報を記述

Cファイルでビルドを起動すると、launch.jsonが読まれ、そこからtasks.jsonを読み込みます。

以下の抜粋のように、tasks.jsonには具体的なコマンドなどが記述されていますので、挙動をいじりたくなったときはひとまずここを覗いてみるとよいでしょう。

たとえば、"command"の項目に"g++"コマンドが、"args"は言葉通りコマンドに渡される引数ですが、gccを使っている人なら何となく読めると思います。"-o"フラグは出力される実行ファイルの名前を指定することができるものでした。

参考:gccの主なオプション
オプション 説明
-o <file> 出力ファイル名を指定(デフォルトは a.out
-c コンパイルのみを行い、リンクはしない(.oファイルを生成)
-Wall すべての一般的な警告を表示
-Werror 警告をエラーとして扱う
-g デバッグ情報を生成(GDB用)
-O, -O1, -O2, -O3 最適化レベルを指定(-O3が最高レベルの最適化)
-std=<version> 使用するC/C++標準を指定(例:-std=c99-std=c++17
-I<dir> インクルードファイルの検索ディレクトリを追加
-L<dir> ライブラリの検索ディレクトリを追加
-l<library> リンクするライブラリを指定(例:-lmで数学ライブラリ)
--version gcc のバージョン情報を表示
--help 使用可能なオプションの一覧を表示
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ debug active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}/bin/${fileBasenameNoExtension}.exe",
                "-lm",
                "-Wall",
                "-Wextra",
            ],
        },
    ],
    "version": "2.0.0"
}

途中にある${~~}という風な文字列は、VS Codeのvariablesです。動的(「実行するとき」の意)に、たとえば${workspaceFolder}ならVS Codeが開いているディレクトリのパスを返してくれます。とにかく、プロジェクトに応じて名前とか場所とか違うと思いますが、そのあたりをいい感じに調整してくれるのです。

余談:ちょっとした工夫

私が作成した設定集にはちょっとした工夫が2点ありまして、1点目は実行形式のファイルをbinというディレクトリに隔離していることです。

実際に使っていると、ディレクトリがソースとバイナリでごっちゃに埋め尽くされてUXを著しく下げたので、こうして隔離してやることで「ソースファイルはソースファイルに、実行形式は実行形式に」おいています。

2点目は、ビルド用のtaskとデバッグ用のtaskがわけてあることです。
launch.jsonやtasks.jsonを見てみるとわかりますが、構成が各々2部に大別できることが読み取れるかと思います。

実際に、Run and Debugのタブ上部の歯車マークの左側にある欄をクリックしてみると、サジェストにbuildとdebugの二項目が表示されていることがわかります。

両者の違いは、GCCのwarning設定をonにしているかどうか、です。GCCは"-W"などのフラグを付けてやると、コード中の間違いではないがやめておいた方がいいコードを検知してwarningとして知らせてくれます。

終わりに

まあ、書きたいことは書けたので良しとします。なんかあったら書き足します。

今後の展望としては、GCCからClangに移行したいですね。なんかGCCって標準化遅いし最適化の有無でエラーがことなるとかいう妙な挙動とるんですよね。Clangがその辺どうなってるのか全然試してないのでわかりませんが…

最後に:初心者こそdebuggerとsanitizerを覚えよう!!!!

追記:clang用の設定も追加しました。使いたい人はREADME読んでください。

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?