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

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

これまでの記事で、C言語のソースファイルを作成し、GCCで実行ファイルを作れるようになりました。

いよいよ、作成したhello.exeを動かしてみましょう。

UCRT64ターミナルで、次のコマンドを実行します。

./hello.exe

画面にメッセージが表示されれば、自分で書いたCプログラムを実行できたことになります。

この記事では、実行コマンドの意味を確認しながら、編集・保存・コンパイル・実行の流れをひととおり体験します。プログラムを変更して、表示内容が変わることも確かめましょう。

実行するプログラムを確認する

今回実行するのは、C:\c-mysql\chap02に保存したhello.cから作成したhello.exeです。

ファイルWindows上の保存場所役割
hello.cC:\c-mysql\chap02\hello.c編集するソースファイル
hello.exeC:\c-mysql\chap02\hello.exe実行するプログラム

まずは、ソースコードを確認しておきましょう。

学習開始のメッセージを表示するプログラム

ファイル名: hello.c

#include <stdio.h>

int main(void)
{
    /* 学習開始のメッセージを表示する */
    printf("Hello, C and MySQL!\n");

    return 0;
}

このプログラムの処理は、次のようになっています。

  1. main関数の処理を開始する。
  2. printfでメッセージを表示し、改行する。
  3. 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.exe

hello.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 $?

表示例

0

Bashの$?は、直前に実行したコマンドの終了ステータスを表します。通常、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/chap02

hello.exeが作られていなければ、hello.cをコンパイルし、エラーがないことを確認します。

変更前のメッセージが表示される

ソースコードを変えたのに表示が変わらない場合は、次の点を順番に確認しましょう。

  1. 編集したhello.cを保存したか。
  2. 保存した後にコンパイルしたか。
  3. コンパイルが成功したか。
  4. C:\c-mysql\chap02にあるhello.cを編集しているか。
  5. /c/c-mysql/chap02にあるhello.exeを実行しているか。

コンパイルに失敗すると、以前のhello.exeが残っている場合があります。実行ファイルの存在だけで判断せず、直前のコンパイル結果も確認してください。

ダブルクリックすると画面がすぐ閉じる

エクスプローラーからhello.exeをダブルクリックすると、コンソールウィンドウが開いてすぐに閉じる場合があります。

今回のプログラムは、メッセージを表示したら終了するためです。

表示結果を確認するときは、UCRT64ターミナルから実行しましょう。すでに開いているターミナルから実行すれば、プログラムが終了しても出力を読み返せます。

画面を止めるための処理をプログラムへ追加する必要はありません。

第2章の成果物を確認する

ここまでの作業で、chap02には次の基本ファイルがそろいました。

ファイル内容
hello.cメッセージを表示するC言語のソースコード
hello.exehello.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言語からデータを扱うアプリへ少しずつ近づけていきましょう。

Follow me!