C言語+MySQL入門|プログラムを実行する

C言語+MySQL入門|プログラムを実行する
これまでの記事で、C言語のソースファイルを作成し、GCCで実行ファイルを作れるようになりました。
いよいよ、作成したhello.exeを動かしてみましょう。
UCRT64ターミナルで、次のコマンドを実行します。
./hello.exe画面にメッセージが表示されれば、自分で書いたCプログラムを実行できたことになります。
この記事では、実行コマンドの意味を確認しながら、編集・保存・コンパイル・実行の流れをひととおり体験します。プログラムを変更して、表示内容が変わることも確かめましょう。
実行するプログラムを確認する
今回実行するのは、C:\c-mysql\chap02に保存したhello.cから作成したhello.exeです。
| ファイル | Windows上の保存場所 | 役割 |
|---|---|---|
| hello.c | C:\c-mysql\chap02\hello.c | 編集するソースファイル |
| hello.exe | C:\c-mysql\chap02\hello.exe | 実行するプログラム |
まずは、ソースコードを確認しておきましょう。
学習開始のメッセージを表示するプログラム
ファイル名: hello.c
#include <stdio.h>
int main(void)
{
/* 学習開始のメッセージを表示する */
printf("Hello, C and MySQL!\n");
return 0;
}このプログラムの処理は、次のようになっています。
- main関数の処理を開始する。
- printfでメッセージを表示し、改行する。
- return 0;で正常終了する。
まだ、キーボードからの入力やMySQLへの接続は行いません。メッセージを表示したら、そのまま終了する小さなプログラムです。
UCRT64ターミナルで作業場所へ移動する
MSYS2 UCRT64を起動してください。VS Codeで設定したUCRT64ターミナルを使ってもかまいません。
使用している環境は、次のコマンドで確認できます。
echo $MSYSTEM表示例
UCRT64続いて、hello.exeがあるディレクトリへ移動します。
cd /c/c-mysql/chap02現在の作業ディレクトリを確認します。
pwd表示例
/c/c-mysql/chap02ファイルの存在も確認しておきましょう。
ls -1 hello.c hello.exe表示例
hello.c
hello.exehello.exeが見つからない場合は、hello.cを保存したうえで、次のコマンドを実行してください。
gcc -std=c17 -Wall -Wextra -Wpedantic hello.c -o hello.exeコンパイルでエラーが出た場合は、修正してから実行へ進みます。
図1:実行ファイルがある場所へ移動する

この図から分かること
Windowsで見たC:\c-mysql\chap02と、MSYS2で使う/c/c-mysql/chap02は、同じ場所を表しています。
先にこのディレクトリへ移動しておくことで、短いコマンドでhello.exeを指定できます。
hello.exeを実行する
準備ができたら、UCRT64ターミナルに次のコマンドを入力し、Enterキーを押してください。
./hello.exe実行結果の例
Hello, C and MySQL!このメッセージが表示されたら、hello.exeを実行できています。
表示の後には、ターミナルが次のコマンドを入力できる状態へ戻ります。これは、プログラムがメッセージを表示し、処理を終えたためです。
hello.exeの実行によって、新しいGUIウィンドウが開くわけではありません。今回はコンソールプログラムなので、起動したターミナルに文字が表示されます。
./hello.exeの意味を知る
実行コマンドの先頭にある./には、意味があります。
| 記述 | 意味 |
|---|---|
| . | 現在の作業ディレクトリ |
| / | ディレクトリとファイル名の区切り |
| hello.exe | 実行するファイル名 |
| ./hello.exe | 現在の作業ディレクトリにあるhello.exe |
つまり、./hello.exeは「今いるディレクトリのhello.exeを実行する」という指定です。
ファイル名だけで実行しない理由
Bashでは、スラッシュを含まないコマンド名を入力すると、組み込みコマンドなどを確認した後、PATHに登録されたディレクトリから実行ファイルを探します。
一方、./hello.exeのようにスラッシュを含めると、指定したパスのファイルを実行します。gnu.org
そのため、この教材では、作業ディレクトリ内のプログラムを明確に指定するために./を付けます。
hello.exeが目の前のディレクトリにあるからといって、ファイル名だけで常に見つかるとは限らない、と覚えておきましょう。
UCRT64ではスラッシュを使う
この記事のコマンドは、UCRT64ターミナルで入力するものです。
Windowsのパス表記でよく見るバックスラッシュと混同せず、次のようにスラッシュを使ってください。
./hello.exeまた、実行するのはhello.exeです。hello.cはソースファイルなので、先にGCCでコンパイルする必要があります。
正常終了したことを確認する
プログラムを実行した直後に、次のコマンドを入力します。
echo $?表示例
0Bashの$?は、直前に実行したコマンドの終了ステータスを表します。通常、0は成功を示します。gnu.org
今回のmain関数はreturn 0;で終了するため、正常に最後まで実行されると0を確認できます。
ここで、次の2つを区別しておきましょう。
| 表示される内容 | 表示する処理 | 意味 |
|---|---|---|
| Hello, C and MySQL! | hello.exe内のprintf | プログラムが出力したメッセージ |
| 0 | ターミナルで実行したecho $? | 直前のプログラムの終了ステータス |
return 0;そのものが、画面に0を表示するわけではありません。
また、終了ステータスを確認する前にlsなどを実行すると、$?の内容が変わります。hello.exeの結果を確認するときは、実行直後にecho $?を入力してください。
図2:画面への出力と終了ステータスの違い

この図から分かること
printfは、利用者に見せる文字を出力します。return 0;は、プログラムの終了状態を実行環境へ伝えます。
画面に期待した文字が表示されることと、正常終了することの両方を確認すると、プログラムの動きを把握しやすくなります。
表示するメッセージを追加してみる
実行できたら、ソースコードを少し変更してみましょう。
VS Codeでhello.cを開き、開発環境の準備ができたことを表すメッセージを追加します。
学習開始と開発環境の準備完了を表示するプログラム
ファイル名: hello.c
#include <stdio.h>
int main(void)
{
/* 学習開始のメッセージを表示する */
printf("Hello, C and MySQL!\n");
/* 開発環境の準備完了を表示する */
printf("My development environment is ready.\n");
return 0;
}追加したprintfによって、もう1行メッセージを表示します。
それぞれの文字列の末尾に\nがあるため、2つのメッセージは別々の行に表示されます。
編集した内容を保存する
Ctrl + Sを押して、hello.cを保存してください。
GCCが読み込むのは、保存済みのファイルです。エディター上で変更しただけでは、その内容でコンパイルされません。
もう一度コンパイルする
UCRT64ターミナルで、次のコマンドを実行します。
gcc -std=c17 -Wall -Wextra -Wpedantic hello.c -o hello.exeエラーや警告が表示された場合は、内容を確認してください。
コンパイルが成功すると、変更後のソースコードに対応したhello.exeが作られます。
更新されたプログラムを実行する
続いて、同じ実行コマンドを入力します。
./hello.exe実行結果の例
Hello, C and MySQL!
My development environment is ready.2行目が追加されていれば、編集内容を保存し、再コンパイルして実行できています。
表示するメッセージを変更した場合も、実行するコマンドは変わりません。hello.exeの内容が更新されることで、動作が変わります。
保存・コンパイル・実行を区別する
今回体験した操作を、役割で整理しておきましょう。
| 操作 | 行う場所 | 何が起こるか |
|---|---|---|
| 編集 | VS Code | ソースコードの内容を変更する |
| 保存 | VS Code | 編集内容をhello.cへ書き込む |
| コンパイル | UCRT64ターミナル | 保存したhello.cからhello.exeを作る |
| 実行 | UCRT64ターミナル | hello.exeの処理を動かす |
特に覚えておきたいのは、保存だけではhello.exeが更新されないという点です。
また、コンパイルしただけでは、hello.exeのメッセージは表示されません。実行する操作が必要です。
最初はひとつずつ確認しながら進めて、操作の違いをつかんでいきましょう。
うまく実行できないときの確認ポイント
実行ファイルが見つからない
./hello.exeを実行してNo such file or directoryなどが表示された場合は、まず作業ディレクトリとファイルを確認します。
pwd
ls -1 hello.exe違うディレクトリにいる場合は、移動し直してください。
cd /c/c-mysql/chap02hello.exeが作られていなければ、hello.cをコンパイルし、エラーがないことを確認します。
変更前のメッセージが表示される
ソースコードを変えたのに表示が変わらない場合は、次の点を順番に確認しましょう。
- 編集したhello.cを保存したか。
- 保存した後にコンパイルしたか。
- コンパイルが成功したか。
- C:\c-mysql\chap02にあるhello.cを編集しているか。
- /c/c-mysql/chap02にあるhello.exeを実行しているか。
コンパイルに失敗すると、以前のhello.exeが残っている場合があります。実行ファイルの存在だけで判断せず、直前のコンパイル結果も確認してください。
ダブルクリックすると画面がすぐ閉じる
エクスプローラーからhello.exeをダブルクリックすると、コンソールウィンドウが開いてすぐに閉じる場合があります。
今回のプログラムは、メッセージを表示したら終了するためです。
表示結果を確認するときは、UCRT64ターミナルから実行しましょう。すでに開いているターミナルから実行すれば、プログラムが終了しても出力を読み返せます。
画面を止めるための処理をプログラムへ追加する必要はありません。
第2章の成果物を確認する
ここまでの作業で、chap02には次の基本ファイルがそろいました。
| ファイル | 内容 |
|---|---|
| hello.c | メッセージを表示するC言語のソースコード |
| hello.exe | hello.cをコンパイルして作成した実行ファイル |
前の記事で警告の練習も行った場合は、warning_example.cとwarning_example.exeも同じディレクトリにあります。
今回hello.exeを動かせたことで、次の流れを確認できました。
- VS CodeでC言語のソースコードを編集・保存できる。
- UCRT64ターミナルからGCCを使える。
- ソースファイルからWindows用の実行ファイルを作れる。
- 実行ファイルを起動して、出力を確認できる。
- ソースコードの変更を再コンパイルで反映できる。
なお、hello.exeはMySQLやGTK 4を使用していません。今回確認したのは、C言語の基本的な開発作業の流れです。データベースへの接続やGUIの表示は、今後のプログラムで確認していきます。
図3:編集から実行までの開発の流れ
イラスト作成用プロンプト

この図から分かること
C言語のプログラムは、編集・保存・コンパイル・実行を繰り返しながら作っていきます。
これからプログラムが大きくなっても、この基本の流れは同じです。期待した結果と実際の結果を見比べ、必要な修正を加えていきましょう。
次はデータベースを扱う準備へ進む
これで、UCRT64環境でCプログラムを作成し、実行するための基本操作を体験できました。
今後も、プログラムは章ごとのディレクトリへ保存していきます。第2章のhello.cとhello.exeはchap02に残しておけば、開発手順を確認したいときに立ち戻れます。
次の章では、在庫管理アプリで使うデータベースやテーブルの準備へ進みます。今回身に付けた開発の流れを土台にして、C言語からデータを扱うアプリへ少しずつ近づけていきましょう。










