🔰

【MinGW × VScode】C言語を実行するための環境構築(WSL未使用)

2023/11/10に公開
更新履歴

2023/11/10 初回投稿

はじめに

インターネット上の同様の記事では, 実行まで一つにまとめられていない, リンク先が無効になっている, 記事が古い, などの問題を感じたため, 改めて私が踏んだ手順を紹介するとともに , 情報源のひとつとして利用していただけたらと思います.

この過程の目的は, VisualStudioCode(以後, VSCodeとする)上ターミナルを利用してC言語をコンパイル及び実行をするためです.
通常, 推奨される(と思っている)のはWSLを利用したLinux上でのgccのインストールですが, 今回は応用性などを無視して, 手軽にGUIでC言語をコンパイル, 実行することを可能にすることを目的とします.

※ショートカットキーなどは基本的に使わず, 視覚的に「どこを開いている」「何をしている」がわかるような進め方をしていきます.
 ※この記事では, 詳しいソフトウェアの説明等は省略させていただき, 環境構築をすることを目的として進めていきます.
 ※記事作成時点でのURL及び画像ですので, 変更, リンク先の変更がされている可能性があります.

この記事の内容について, 引用して別記事やサイトを作成する際にはリンク引用して貼り付けていただけると嬉しいです.
(できれば一報をお願いします.)

手順

この記事では, 以下の手順で環境構築を進めいていきます.

  1. VSCodeのインストール
  2. MinGWのインストール
  3. 環境変数の編集
  4. VSCodeの環境構築
  5. 実行

環境

  • Windows11 Pro 22H2 (動作確認済み)
     上記以外のWindowsバージョンでも動作

環境構築

1. VSCodeのインストール

VSCode公式サイト

https://code.visualstudio.com/

VSCode公式サイトから Download For Windows をクリックしてガイドに沿ってダウンロードを進めていきます.
インストールが完了したら, 早速VSCodeを起動してみましょう.

2. MinGWのインストール

SourceForgeというサイトから, MinGWインストーラーをダウンロードしていきます.
https://sourceforge.net/projects/mingw/
※2023/11現在, リンク先が存在していることを確認しています.

インストーラーに従ってインストールを完了させると, 以下のようなウィンドウが開きます.
ダウンロード先も特に変更する必要はありません.
任意のダウンロード先に変更した場合は, ディレクトリを覚えといてください.

MinGW

以下の4つをインストールします.

  • mingw32-base
  • mingw-developer-toolkit
  • mingw-gcc-g++
  • msys-base

mingw32-baseの右側の□をクリック, 又はmingw32-baseの名前の上で右クリックして, Mark for Installationをクリックすると, □マークに矢印が追加されたマークに変化します.
残りの3つも同様に選択していきます.

選択が完了したら, 左上Installation → Apply Changesをクリックすると新しくウィンドウが開きます.
ウィンドウ上の
Apply**をクリックするとダウンロードが始まります.

All changes were applied successfully; you may now close this dialogue.
と, 表示されたら, すべてのダウンロードが終了です, CloseをクリックしてMinGWも終了して構いません.

保存先ディレクトリを特に変更していない場合,

C:\MinGW

にディレクトリが追加されています.

※追記

C:\MinGW

は, コンピュータの環境に依存しないため, 別端末やWindowsの再インストールなど, 違う環境にもMinGWを追加する際には, MinGWディレクトリをコピー&ペーストすることで, MinGWのインストールを省略することができます.

3. 環境変数の編集

C:\MinGW

に移動します.
GUIで移動する場合はエクスプローラー → ローカルディスク(C:) → MinGW
ディレクトリにある, binというフォルダのパスをコピーします.
保存先を変更していない方は以下のパスを利用することができます.

C:\MinGW\bin

タスクバーの検索バーに環境変数と入力してシステム環境変数の編集を開きます.
Windows + R から sysdm.cplを実行して, 詳細設定に移動することでも開くことができます.

binと検索

ウィンドウ下部の環境変数(N) をクリックすると, 以下のようなウィンドウが表示されます.

環境変数

上部のユーザ環境変数(U) の欄からPath を選択して, 選択されている状態で編集(E) をクリックします.
環境変数名の編集 ウィンドウから右側の新規(N) をクリックします.
現れたテキストボックスに先ほどコピーしたディレクトリのパス

C:\MinGW\bin

を張り付けます. 以下のようになれば完了です.

環境変数

OKをクリックして環境変数ウィンドウを閉じます.

変更を適用するためにWindowsを再起動したら編集は完了です.

4. VSCodeの環境構築

再起動が完了したらVSCodeを開いてみましょう.
VSCodeは初期状態では英語で動作します.

詳しいVSCodeの使い方は省略します, 必要なツールの導入のみを解説します.
追加する拡張機能について, 詳しくは説明しませんが,
拡張機能のすべてが公式リリースではありません
拡張機能は有志団体や一般ユーザーが公開しているものも多数存在します. 詳しくは各塗油機能の説明欄や発行者などをご覧ください.
※非公式の拡張機能が危険というわけではありません. 便利ツールのたくさん存在します.

拡張機能の追加は左側のブロックのようなマーク(Extension)をクリックすることで拡張期右脳の検索画面が表示されます.
( 又はCtrl + Shift + X )

VSCodeの日本語化

Japanese Language Pack for Visual Studio Code」をインストールします.
japaneseと検索すると, 該当の拡張機能が表示されるので, クリックしてInstallをクリックします.
しばらくすると, 右下にポップアップが表示されるのでChange Language and Restartをクリックします.
※表示されない場合は一度Uninstallをしてみてください.

C言語拡張機能の追加

同様に検索してインストールをクリックする方法で, C言語関連の拡張機能を追加しましょう.

  • C/C++
  • C/C++ Extension Pack
    をインストールします. 最低限のインストールになるので, 他の拡張機能もぜひ調べてみてください.

5. 実行

実際にC言語ファイルを実行してみます.
test.cというファイルを作成します.

test.c
#include <stdio.h>

int main(void)
{
    printf("test\n");
    printf("てすと\n");
    printf("テスト\n");

    return 0;
}

Hello, Worldではない理由はのちに説明します.
※エラー(波線や下線)が出る場合は拡張機能が適用されていません.
VSCodeの再起動や, 拡張機能の再インストールをしてみてください.

  • ターミナルはCtrl + shift + @
  • 上部のターミナル新しいターミナル
    で起動できます.

コンパイルコマンドはLinux系と同じく

gcc {ファイル名.c}

実行コマンドも

./{実行ファイル名.exe}

となります.

ファイル名をtest.cとしている場合,コンパイルは

gcc test.c

実行は

./test.exe

になります.

※追記
環境によって実行ファイルの出力名がa.exeになったり, test.exeなったりします.
ディレクトリを確認して

./{実行ファイル名.exe}

のルールに従ってください.

問題 - 文字化け

実行結果が文字化けしているという場合
英語, 平仮名, 片仮名, がすべて正しく表示されるのであれば問題ないですが, 恐らく日本語が文字化けしているでしょう.
これについて検証するためにHello, Worldをから変更しました.

実行結果

これの解決方法は以下の記事で掲載しています.
https://zenn.dev/12morosy/articles/180bca27a1cb49
現在編集中

※抜粋して説明します.

解決方法

以下のいずれかの方法を利用します.

  1. コマンドの追加 (+ CodeRunner) (推奨)
  2. エンコーダーの変更 (あまり推奨しない)
  3. システムロケールの変更 (非推奨)

※基本的には1をご利用ください.

1. コマンドの追加 (+ CodeRunner) (推奨)

1. コマンドの追加

まずはコンパイルコマンドを以下のように変更します.

gcc {ファイル名.c} -fexec-charset=CP932

つまり今回のファイルtest.cでは

gcc test.c -fexec-charset=CP932

とコンパイルします.
このコマンドを実行すると, コンパイルされた後のファイル名はa.exeとなります
※a.exeは最新の実行ファイルが上書きされていきます.

ファイル名を指定したい場合は

gcc {元ファイル名.c} -o {実行ファイル名.exe} -fexec-charset=CP932

または

gcc -o {実行ファイル名.exe} {元ファイル名.c} -fexec-charset=CP932

というコマンドを指定します.
要約すると

gcc {コンパイル前ファイル名.c} -o {コンパイル後ファイル名.exe} {文字コード指定}

または

gcc -o {コンパイル後ファイル名.exe} {コンパイル前ファイル名.c} {文字コード指定}

今回の場合は

gcc -o test.exe test.c -fexec-charset=CP932

というコマンドになります.

※追記

gcc test.c -o test.exe -fexec-charset=CP932

-oの位置を変えることで直感的な順番にすることが可能です.
こちらほうが順番的に覚えやすい.

実行は変わらず

./{実行ファイル名.exe}

私の環境と原因が一致していれば正しい文字コードで実行されるはずです.
※例外が発生した場合はお知らせください

実行結果

しかし, せっかくGUIで楽に実行したいのに
コマンドを覚えて一回一回入力するのはめんどくさい! と思うはず.
次の項目では, ボタンひとつで, ショートカットひとつで実行できるようにします.

2. CodeRunner

拡張機能「CodeRunner」を追加しましょう.

CodeRunner

追加が完了したらアンインストールの右側の設定マークをクリックして,
次のふたつの設定を変更します.

  1. Setting.json
    設定を少し下がりCode-runner: Executor Mapを探して, その直下のsetting.jsonをクリックして開きます.

    7行目(私の環境)の""(ダブルコーテーション)で囲まれたコードの書き換えをします.
    デフォルトでは
default
"cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

となっている部分を

after
"cd $dir && gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"

と変更します.

設定を戻す場合も考えて, 従来のコードをコメントアウトや, 別ファイルでjsonを丸ごとコピーしていくことを推奨します.

※ご覧の環境によってはコードに改行が入っている可能性がありますが, 変更前のコードに倣って, 改行をいれずに1行に収めてください.

書き換え後のsetting.json

書き換えが完了したら, Ctrl + Sなどでファイルを上書き保存して, 閉じてください.

  1. Run in Terminal
    設定をさらに下がったところ, Code-runner: Run In Terminalにチェックマークを入れましょう.
    これは保存など押す必要はありません.

以上の工程が終了したら, 念のため, VSCodeを再起動して, 再度test.cを開いてみましょう.
ファイルがアクティブの状態で,

  • Ctrl + Alt + N
  • 右上の再生ボタンの右側プルダウンRun Code
    のいずれかで実行できるようになります.


Run Code

2. エンコーダーの変更(あまり推奨しない)

VSCode右下,デフォルトではUTF-8となっている部分をクリックして,エンコード付きで再度開くShift-JIS を選択します.
こうすることでエディタとターミナルがShift-JISに統一されるので, 文字コード通りに実行されます.
※Windowsのファイルは基本的にUTF-8なのでVScode以外で編集するとエディタ自体も文字化けする可能性が高い

3. システムロケールの変更

他のソフトの一部が文字化けすることが確認されたので掲載しません

まとめ

今回はMinGW × VSCodeの組み合わせを利用してVSCode上で簡単に実行できることを目的としました.
Pythonやjs系など, ほかの言語の環境を構築する際には, ぜひWSLやDocker, venvやasdfなどでバージョン管理ができるような環境を構築してみてください.

私の考えでは, あくまで, MinGWはローカルにでgccを利用する方法の一つに過ぎないうえ, C言語以外への拡張性がほぼないのにも関わらず手順が複雑であると感じています.

Discussion