C言語の基本|C言語の文字列比較の基本

この記事の概要

Visual Studio Codeには、エディターの中でコマンドを実行できる統合ターミナルがあります。本コンテンツでは、この統合ターミナルからMSYS2 UCRT64のBashを起動し、GCCやGTK 4のコマンドを実行します。

ここでは、次の内容を順番に確認します。

  • Visual Studio Codeの統合ターミナルの役割
  • ターミナルプロファイルの仕組み
  • MSYS2 UCRT64 Bashの登録方法
  • UCRT64 Bashを既定のターミナルにする方法
  • PowerShellとBashの違い
  • 現在使用しているターミナルの確認方法
  • 設定がうまくいかない場合の確認ポイント

この段階では、まだC言語のプログラムは作成しません。Visual Studio Codeから正しい開発環境を起動できるようにすることが目的です。

Visual Studio Codeの統合ターミナルとは

Visual Studio Codeの統合ターミナルは、ソースファイルを編集する画面と同じウィンドウ内でコマンドを実行するための機能です。

通常であれば、Visual Studio CodeとMSYS2 UCRT64ターミナルを別々のウィンドウで開く必要があります。統合ターミナルを使えば、ファイルを編集した直後に、そのまま画面下部でコンパイルや実行ができます。

Visual Studio Codeの公式ドキュメントでも、統合ターミナルはワークスペースのルートディレクトリから起動し、通常のターミナルと同じようにコマンドを実行できる機能として説明されています。

統合ターミナルでは、次のような操作ができます。

  • ディレクトリを移動する
  • ファイルの一覧を表示する
  • GCCでC言語プログラムをコンパイルする
  • 作成した実行ファイルを起動する
  • pacmanでパッケージを管理する
  • pkg-configでGTK 4の情報を取得する
  • コンパイルエラーや警告を確認する

統合ターミナルは、メニューバーの「ターミナル」から「新しいターミナル」を選択すると開けます。「表示」から「ターミナル」を選択する方法もあります。

ショートカットキーはキーボード配列によって見え方が異なるため、最初はメニューから開くと確実です。

図1:Visual Studio Codeの統合ターミナル

この図から分かること

Visual Studio Codeでは、ソースファイルの編集とターミナル操作を同じ画面で行えます。

ただし、統合ターミナルで使われるシェルは1種類ではありません。WindowsではPowerShellが最初に選ばれる場合がありますが、本コンテンツで使用するのはMSYS2 UCRT64 Bashです。

ターミナルとシェルの違い

ターミナルとシェルは似た意味で使われることがありますが、厳密には役割が異なります。

用語役割
ターミナルコマンドや実行結果を表示するための画面
シェル入力されたコマンドを解釈して実行するプログラム
統合ターミナルVisual Studio Codeの中に表示されるターミナル
PowerShellWindowsで利用できるシェル
BashMSYS2などで利用できるシェル
ターミナルプロファイル起動するシェルや引数をまとめた設定

Visual Studio Codeの画面下部に表示される部分が統合ターミナルで、その中で動作するのがPowerShellやBashです。

本コンテンツでは、統合ターミナルの中でMSYS2 UCRT64のBashを動作させます。

MSYS2 UCRT64 Bashを使用する理由

MSYS2には、MSYS、UCRT64、CLANG64など複数の環境があります。それぞれ使用するコンパイラー、ライブラリ、環境変数などが異なります。

本コンテンツでは、Windows向けの64ビットプログラムをGCCで作成するため、UCRT64環境を使用します。

UCRT64環境が正しく起動すると、環境変数MSYSTEMにはUCRT64が設定され、PATHの先頭付近には次のディレクトリが登録されます。

/ucrt64/bin
/usr/bin

これにより、UCRT64用のGCC、GTK 4、pkg-configなどが優先的に使用されます。MSYS2の公式ドキュメントでも、UCRT64環境ではPATHが /ucrt64/bin:/usr/bin から始まると説明されています。

MSYS2のインストール先を確認する

ここでは、MSYS2が次のディレクトリにインストールされているものとして説明します。

C:\msys64

エクスプローラーでC:\msys64を開き、次のファイルが存在することを確認してください。

C:\msys64\msys2_shell.cmd

このファイルは、MSYS2の各環境を起動するためのスクリプトです。

MSYS2を別のディレクトリにインストールした場合は、この後の設定にあるC:\msys64を実際のインストール先へ変更します。

Visual Studio Codeのユーザー設定を開く

MSYS2 UCRT64 Bashを登録するには、Visual Studio Codeのsettings.jsonを編集します。

次の手順でユーザー設定を開きます。

  1. Visual Studio Codeを起動します。
  2. Ctrl+Shift+Pを押してコマンドパレットを開きます。
  3. 検索欄に「設定 JSON」と入力します。
  4. 「基本設定: ユーザー設定を開く(JSON)」を選択します。

表示言語によっては、次のような英語表記になっていることがあります。

Preferences: Open User Settings (JSON)

settings.jsonには、Visual Studio Code全体で使用する設定が保存されています。

すでに設定が書かれている場合は、ファイル全体を消さず、既存の波かっこの内側へ新しい設定を追加します。設定項目と設定項目の間にはカンマが必要です。

補足

手順3:➀検索欄に「設定 JSON」と入力します。

手順4:➁「基本設定: ユーザー設定を開く(JSON)」を選択します。

下図のように表示されます。

MSYS2 UCRT64 Bashを登録する

MSYS2の公式ドキュメントでは、Visual Studio Codeからmsys2_shell.cmdを呼び出し、UCRT64環境を起動する方法が案内されています。

本コンテンツでは、その設定に既定のターミナルを指定する項目を加えます。

UCRT64 Bashを統合ターミナルへ登録する設定

ファイル名:settings.json

{
    "files.encoding": "utf8",
    "terminal.integrated.profiles.windows": {
        "MSYS2 UCRT64 Bash": {
            "path": "cmd.exe",
            "args": [
                "/c",
                "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64"
            ]
        }
    },
    "terminal.integrated.defaultProfile.windows": "MSYS2 UCRT64 Bash"
}

files.encodingは、ファイルをUTF-8で保存するための設定です。前の項で設定済みの場合も、そのまま残しておきます。

補足

settings.json に上記内容を追加します。

settings.json では、設定項目を続けて書く場合、それぞれの項目の末尾をカンマで区切る必要があります。

つまり、

設定1,
設定2,
設定3

のように記述します。

設定内容を詳しく見てみましょう。

設定項目役割
terminal.integrated.profiles.windowsWindowsで使用するターミナルプロファイルを登録する
MSYS2 UCRT64 BashVisual Studio Codeに表示されるプロファイル名
path最初に起動するプログラムを指定する
cmd.exeMSYS2の起動スクリプトを実行する
argscmd.exeへ渡す引数を指定する
terminal.integrated.defaultProfile.windows既定で起動するプロファイルを指定する

msys2_shell.cmdへ渡している引数には、次の役割があります。

引数役割
-defterm現在のターミナル環境を利用してMSYS2を起動する
-hereVisual Studio Codeで開いている作業ディレクトリを引き継ぐ
-no-start別のターミナルウィンドウを開かず、統合ターミナル内で起動する
-ucrt64MSYS2のUCRT64環境を選択する

Windowsのパスをsettings.jsonへ記述するときは、円記号を2つ重ねます。

C:\\msys64\\msys2_shell.cmd

これはsettings.jsonで円記号が特別な意味を持つためです。エクスプローラーで表示される実際のパスは次のとおりです。

C:\msys64\msys2_shell.cmd

図2:MSYS2 UCRT64 Bashが起動する流れ

この図から分かること

Visual Studio Codeが直接GTK 4やGCCを動かしているわけではありません。

登録したターミナルプロファイルからcmd.exeが起動され、cmd.exeがmsys2_shell.cmdを実行します。msys2_shell.cmdへ-ucrt64を渡すことで、UCRT64環境のBashが統合ターミナル内に起動します。

設定を保存して新しいターミナルを開く

settings.jsonを保存したら、現在開いているターミナルをいったん終了します。

  1. Ctrl+Sでsettings.jsonを保存します。
  2. 画面下部のターミナルを確認します。
  3. ごみ箱のボタンを押して、現在のターミナルを終了します。
  4. メニューバーから「ターミナル」を選択します。
  5. 「新しいターミナル」を選択します。

すでに開かれているPowerShellは、設定を保存しても途中からUCRT64 Bashへ切り替わりません。設定は、新しく作成したターミナルに反映されます。

設定が正しければ、ターミナルの一覧やタブに次の名前が表示されます。

MSYS2 UCRT64 Bash

下図のように表示されるようになります。

UCRT64 Bashを既定のターミナルにする

先ほどのsettings.jsonには、次の設定を記述しました。

"terminal.integrated.defaultProfile.windows": "MSYS2 UCRT64 Bash"

この設定により、新しいターミナルを作成したときにMSYS2 UCRT64 Bashが自動的に起動します。

画面操作で既定のターミナルを選ぶこともできます。

  1. Visual Studio Codeでターミナルを開きます。
  2. ターミナル右上にある下向きの矢印を選択します。
  3. 「既定のプロファイルの選択」を選びます。
  4. 「MSYS2 UCRT64 Bash」を選択します。
  5. 既存のターミナルを終了します。
  6. 新しいターミナルを開きます。

Visual Studio Codeでは、ターミナル右上のメニューまたは「Terminal: Select Default Profile」から既定のプロファイルを選択できます。

補足

手順2:ターミナル右上にある下向きの矢印を選択します。

手順3:「既定のプロファイルの選択」を選びます。

手順4:「MSYS2 UCRT64 Bash」を選択します。

PowerShellとMSYS2 UCRT64 Bashの違い

PowerShellとBashは、どちらもコマンドを実行するためのシェルです。ただし、コマンドの書き方やパスの表記方法が異なります。

操作PowerShellMSYS2 UCRT64 Bash
WindowsのCドライブC:\/c
作業ディレクトリへの移動cd C:\cguicd /c/cgui
実行ファイルの起動.\hello.exe./hello.exe
PATHの表示$env:PATHecho $PATH
MSYSTEMの表示$env:MSYSTEMecho $MSYSTEM
ファイル一覧Get-ChildItemまたはdirls
コマンドの場所を調べるGet-Command gccwhich gcc
主な用途Windowsの管理や自動化MSYS2の開発ツールを利用する

PowerShellが間違ったターミナルというわけではありません。PowerShellはWindowsの管理や自動化に向いた便利なシェルです。

ただし、本コンテンツで紹介するコマンドはMSYS2 UCRT64 Bashでの実行を前提とします。PowerShellで同じ文字列を入力すると、次のような問題が発生することがあります。

  • gccが見つからない
  • pkg-configが見つからない
  • pacmanが見つからない
  • /c/cguiのようなMSYS2形式のパスを使用できない
  • ./hello.exeの実行方法が異なる
  • Bash用のコマンド置換や環境変数の書き方を解釈できない

特にGTK 4プログラムのコンパイルでは、pkg-configが出力した情報をGCCへ渡します。そのため、最初から本コンテンツと同じUCRT64 Bashを使用すると、コマンドの違いによる混乱を減らせます。

使用中のターミナルを確認する

ターミナルの見た目だけでは、PowerShell、通常のMSYS2、UCRT64 Bashを区別しにくい場合があります。

最も確実な確認方法は、環境変数MSYSTEMを表示することです。

echo $MSYSTEM

UCRT64 Bashが正しく起動していれば、次のように表示されます。

UCRT64

何も表示されない場合は、PowerShellや通常のコマンドプロンプトを使用している可能性があります。

MINGW64やCLANG64と表示された場合は、MSYS2の別の環境が起動しています。

MINGW64
CLANG64

本コンテンツで使用する正しい表示はUCRT64です。

Bashと開発ツールの場所を確認する

続いて、BashやGCCがどこから呼び出されているかを確認します。

which bash
which gcc
which pkg-config

正しく設定されている場合は、おおむね次のように表示されます。

/usr/bin/bash
/ucrt64/bin/gcc
/ucrt64/bin/pkg-config

重要なのは、gccとpkg-configのパスが/ucrt64/binから始まっていることです。

確認結果状態
/ucrt64/bin/gcc正しいUCRT64用GCC
/mingw64/bin/gccMINGW64環境のGCC
/usr/bin/gccMSYS環境のGCCである可能性がある
何も表示されないGCCやpkg-configが見つかっていない

GCCのバージョンも確認しておきましょう。

gcc --version

正しくインストールされていれば、先頭付近にGCCのバージョンとMSYS2プロジェクトに関する情報が表示されます。バージョン番号はインストールした時期によって異なります。

GTK 4が認識されていることは、次のコマンドで確認できます。

pkg-config --modversion gtk4

GTK 4が正しくインストールされていれば、次のようにバージョン番号が表示されます。

4.x.x

実際には、インストールされているGTK 4の具体的なバージョン番号が表示されます。

作業ディレクトリを確認する

現在の作業ディレクトリはpwdで確認できます。

pwd

たとえば、Visual Studio CodeでC:\cguiを開いている場合は、次のように表示されます。

/c/cgui

WindowsとMSYS2では、同じ場所でもパスの表記が異なります。

Windowsでの表記MSYS2での表記
C:\cgui/c/cgui
C:\cgui\chap03/c/cgui/chap03
C:\msys64\ucrt64/ucrt64

MSYS2 UCRT64 Bashでは、Cドライブを/cと表します。バックスラッシュではなく、スラッシュでディレクトリを区切ります。

図3:UCRT64環境を確認するコマンド

この図から分かること

ターミナルの名前だけでなく、MSYSTEMとコマンドの場所を確認することで、UCRT64環境が正しく起動しているか判断できます。

特に次の3点が確認できれば、本コンテンツを進めるための基本的なターミナル設定は完了しています。

  • echo $MSYSTEMの結果がUCRT64
  • which gccの結果が/ucrt64/bin/gcc
  • which pkg-configの結果が/ucrt64/bin/pkg-config

ターミナルを一度だけ選んで起動する

既定のターミナルを変更せず、必要なときだけMSYS2 UCRT64 Bashを起動することもできます。

  1. ターミナル右上の下向きの矢印を選択します。
  2. 表示された一覧から「MSYS2 UCRT64 Bash」を選択します。
  3. 新しいUCRT64 Bashが開いたことを確認します。

PowerShellとUCRT64 Bashを同時に開くこともできます。それぞれ別のタブとして表示されるため、タブ名を確認してからコマンドを入力してください。

本コンテンツのコンパイルコマンドやMSYS2の管理コマンドは、MSYS2 UCRT64 Bashのタブで実行します。

MSYS2 UCRT64 Bashが一覧に表示されない場合

登録したプロファイルが表示されない場合は、settings.jsonを確認します。

特に多い原因は次のとおりです。

  • 設定項目の間にカンマがない
  • 波かっこの対応が間違っている
  • C:\msys64の場所にMSYS2がインストールされていない
  • msys2_shell.cmdのファイル名が間違っている
  • Windowsのパスで円記号を1つしか書いていない
  • settings.jsonを保存していない

Visual Studio Codeでは、settings.jsonの書式に問題があると赤い波線が表示されます。赤い波線がある場合は、波かっこ、ダブルクォーテーション、カンマを確認しましょう。

新しいターミナルがPowerShellになる場合

既定のプロファイルを変更しても、すでに開いているPowerShellが自動的にUCRT64 Bashへ変わることはありません。

次の手順で開き直します。

  1. PowerShellのタブを選択します。
  2. ごみ箱のボタンでターミナルを終了します。
  3. 「新しいターミナル」を選択します。
  4. タブ名がMSYS2 UCRT64 Bashになっていることを確認します。
  5. echo $MSYSTEMを実行します。

それでもPowerShellが開く場合は、settings.jsonに次の設定があるか確認してください。

"terminal.integrated.defaultProfile.windows": "MSYS2 UCRT64 Bash"

右側のプロファイル名は、terminal.integrated.profiles.windowsの中で登録した名前と完全に一致させます。

ターミナルがすぐに閉じる場合

ターミナルが起動直後に閉じる場合は、MSYS2のインストール先が設定と一致していない可能性があります。

エクスプローラーで次のファイルを確認します。

C:\msys64\msys2_shell.cmd

存在しない場合は、MSYS2をインストールした場所を調べ、settings.jsonのパスを変更します。

たとえば、MSYS2をD:\msys64へインストールした場合は、次のようにします。

"args": [
    "/c",
    "D:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64"
]

gccが見つからない場合

UCRT64 Bashが起動していても、GCCツールチェーンがインストールされていなければgccは実行できません。

gcc --version

次のようなメッセージが表示される場合は、GCCが見つかっていません。

bash: gcc: command not found

この場合は、次の点を確認します。

  • echo $MSYSTEMの結果がUCRT64になっているか
  • GCCツールチェーンのインストールが完了しているか
  • MSYS2の更新後にターミナルを再起動したか
  • which gccで/ucrt64/bin/gccが見つかるか

設定後に確認する項目

次の項目をすべて確認できたら、Visual Studio CodeからMSYS2 UCRT64を使用する準備は完了です。

  • Visual Studio Codeで統合ターミナルを開ける
  • ターミナル一覧にMSYS2 UCRT64 Bashが表示される
  • 新しいターミナルでMSYS2 UCRT64 Bashが起動する
  • echo $MSYSTEMの結果がUCRT64になる
  • which gccの結果が/ucrt64/bin/gccになる
  • gcc --versionでバージョン情報が表示される
  • which pkg-configの結果が/ucrt64/bin/pkg-configになる
  • pkg-config --modversion gtk4でGTK 4のバージョンが表示される
  • pwdでVisual Studio Codeの作業ディレクトリが表示される

この状態にしておけば、これから作成するC:\cguiのファイルをVisual Studio Codeで編集し、そのまま統合ターミナルからコンパイルできるようになります。