C言語+MySQL入門|最初のCプログラムを書く

C言語+MySQL入門|最初のCプログラムを書く

前回は、C:\c-mysqlの中に、chap02からchap16までのディレクトリを作成しました。

今回は、いよいよ最初のCプログラムを書きます。VS Codeを使って、メッセージを1行表示するプログラムを作成し、chap02にhello.cという名前で保存しましょう。

この記事では、次の内容を扱います。

  • chap02にhello.cを作成する。
  • 短いCプログラムを入力する。
  • プログラムの各部分の意味を確認する。
  • UTF-8で保存する。
  • UCRT64ターミナルから保存した内容を確認する。

この記事の到達点は、C:\c-mysql\chap02\hello.cを正しく保存すること です。

コンパイルは次の記事から行います。ここでは実行結果の例を先に確認し、どのような動作を目指すのかを理解しておきましょう。

最初はメッセージを表示するプログラムから

最終的にはMySQLを使った在庫管理アプリを作りますが、まずは短いCプログラムで、基本の開発手順を確かめます。

今回のプログラムは、実行すると次のメッセージを表示します。

Hello, C and MySQL!

表示する内容は、C言語とMySQLの学習を始めるためのあいさつです。プログラムの中にMySQLへの接続処理があるわけではありません。

今回使うのは、C言語の基本構文と標準ライブラリの表示機能です。

ソースファイルと実行ファイルの違い

これから作成するhello.cと、後で作成するhello.exeには、次の違いがあります。

ファイル内容作成する方法
hello.c人が読むことのできるC言語のソースコードVS Codeで入力して保存する
hello.exeWindowsで実行するプログラムGCCでコンパイル・リンクして作成する

hello.cを保存しただけでは、hello.exeは作成されません。

まずソースコードを保存し、その後でGCCを使って実行ファイルを作る、という順番で進めます。

図1:最初のCプログラムをchap02に保存する

この図から分かること

今回作成するhello.cは、chap02の中に保存します。

ファイル名だけでなく保存先もそろえることで、次の記事でGCCから迷わずファイルを指定できます。

VS Codeでhello.cを作成する

VS Codeで、前回までに準備したC:\c-mysqlを開いてください。

左側のエクスプローラーに、chap02からchap16までのディレクトリが表示されていることを確認します。

chap02の中に新しいファイルを作る

  1. エクスプローラーでchap02を右クリックする。
  2. 新しいファイルを選ぶ。
  3. ファイル名にhello.cと入力する。
  4. Enterキーを押す。

エディターにhello.cが開けば、入力の準備ができました。

ファイル名は、小文字でhello.cにします。拡張子の.cは、C言語のソースファイルであることを示します。

保存先を確認する

今回の保存先は、次の場所です。

C:\c-mysql\chap02\hello.c

UCRT64では、同じファイルを次のパスで参照します。

/c/c-mysql/chap02/hello.c

c-mysqlの直下や、ほかの章のディレクトリに作成していないか確認しましょう。

プログラムを入力する

hello.cに、次のプログラムをすべて入力してください。

コードの左側にエディターが表示する行番号は、入力する必要がありません。

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

ファイル名: hello.c

#include <stdio.h>

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

    return 0;
}

入力できたら、Ctrl+Sを押して保存します。

プログラムを囲む波括弧や、printfとreturnの行末のセミコロンも忘れずに入力しましょう。

実行結果の例

このプログラムを、後の記事でコンパイルして実行すると、次のように表示されます。

Hello, C and MySQL!

メッセージの末尾で改行され、プログラムは終了します。

これは完成後の実行結果の例です。現時点では、ソースコードを保存できていれば大丈夫です。

プログラムを上から見てみよう

短いプログラムですが、C言語の基本となる要素が含まれています。

記述役割
#include <stdio.h>標準入出力の関数を使うために必要な宣言などを取り込む
int main(void)プログラムの処理を書くmain関数を定義する
{ と }関数の処理範囲を囲む
/* と */プログラムの説明であるコメントを囲む
printf文字列などを出力する
\n文字列の中で改行を表す
return 0;main関数を終了し、正常終了を表す値を返す

それぞれの役割を、もう少し詳しく確認しましょう。

#include <stdio.h>で表示機能を使う準備をする

stdio.hは、C言語の標準入出力に関するヘッダーファイルです。

今回使うprintfの宣言も含まれています。#includeによって、コンパイラーが関数の型などを確認できるようにします。

ここでは、stdio.hにprintfの処理本体がすべて書かれている、と考えないようにしましょう。ヘッダーファイルは、関数を正しく利用するための宣言などを提供します。

#includeの行末には、セミコロンを付けません。

main関数にプログラムの処理を書く

今回のプログラムでは、main関数の中に処理を書いています。

int main(void)の意味は、次のように分けられます。

部分意味
int整数の値を返す関数であることを示す
main通常のCプログラムで、開始時に呼び出される関数の名前
voidこの定義では、関数の引数を受け取らないことを示す

mainの後にある波括弧の内側が、関数の本体です。

今回の処理は、メッセージを表示してから終了する、という簡単な流れになっています。

コメントは読み手のための説明

プログラム中の日本語は、コメントです。

/から/までの内容は、プログラムを読む人のための説明として書いています。この文章が実行時に表示されることはありません。

ソースコードに説明を残しておくと、後から読み直したときに、その処理の目的を思い出しやすくなります。

printfでメッセージを出力する

printfは、文字列や数値などを出力する標準ライブラリ関数です。

今回の呼び出しでは、ダブルクォーテーションで囲んだ文字列を渡しています。出力先を変更せずにターミナルから実行すると、そのターミナルにメッセージが表示されます。

文字列を囲むダブルクォーテーションは、C言語の構文として必要です。ただし、ダブルクォーテーションそのものは画面に表示されません。

\nで改行する

文字列の末尾にある\nは、改行を表すエスケープシーケンスです。

ソースコードではバックスラッシュとnの二つの文字で書きますが、出力するときには改行として扱われます。

/nのようなスラッシュではなく、バックスラッシュを使う点に注意してください。

return 0;で正常終了を表す

return 0;は、main関数から0を返してプログラムを終了する記述です。

main関数から返す0は、実行環境に対して正常終了を表します。

これは画面に0を表示する命令ではありません。画面に表示する処理と、プログラムの終了状態を伝える処理は、別の役割です。

図2:メッセージを表示して終了する流れ

この図から分かること

main関数が呼び出されると、printfでメッセージを出力し、returnで処理を終了します。

stdio.hの取り込みは、この実行の流れに入る前の、プログラムをビルドする段階で扱われます。

入力するときに確認したい記号

C言語では、記号の違いがプログラムの意味に影響します。

最初は、次の点を確認しておきましょう。

確認する部分入力するときのポイント
main、printf、return大文字と小文字を例とそろえる
丸括弧開く括弧と閉じる括弧を対応させる
波括弧main関数の本体を囲む
ダブルクォーテーション半角の記号を使う
セミコロンprintfとreturnの行末に付ける
\nバックスラッシュと小文字のnで書く
字下げ半角スペースなどでそろえる

文章入力用の引用符や全角の記号が混ざると、コンパイル時のエラーにつながります。コメントの日本語と、C言語の構文に使う記号を区別して入力しましょう。

字下げで処理のまとまりを見やすくする

今回のコードでは、main関数の中を半角スペース4個で字下げしています。

この字下げをインデントと呼びます。

インデントそのものが波括弧の代わりになるわけではありませんが、処理のまとまりを読み取りやすくできます。空行も、読みやすくするために使っています。

UTF-8で保存されていることを確認する

hello.cを開いた状態で、VS Codeのステータスバーを確認します。

項目確認する内容
ファイル名hello.c
文字コードUTF-8
言語モードC
保存先C:\c-mysql\chap02

VS Codeでは、ステータスバーから文字コードを確認でき、その表示をクリックすると、別の文字コードで保存する操作もできます。

今回新しく入力したファイルがUTF-8以外になっている場合は、文字コードの表示をクリックし、エンコード付きで保存する項目からUTF-8を選びます。

言語モードがCになっていない場合は、まず拡張子が.cになっているか確認してください。必要に応じて、言語モードの表示からCを選択できます。

保存を忘れないようにする

入力や修正をしたら、Ctrl+Sを押しましょう。

GCCが後で読み込むのは、ディスクに保存されたファイルです。エディター上の変更が未保存のままだと、以前に保存した内容がコンパイルされてしまいます。

UCRT64から保存したファイルを確認する

VS Codeの統合ターミナルで、MSYS2 UCRT64を開きます。

第2章のディレクトリへ移動してください。

cd /c/c-mysql/chap02

現在位置を確認します。

pwd

実行結果の例

/c/c-mysql/chap02

続けて、hello.cが存在するか確認します。

ls -l hello.c

実行結果の見方

hello.cの情報が1行で表示されます。権限、所有者、ファイルサイズ、更新日時などの値は環境によって異なります。

ファイルが見つからないというエラーが出なければ、現在のディレクトリからhello.cを参照できています。

保存した内容を表示する

ファイルの内容は、次のコマンドで確認できます。

cat hello.c

実行結果の例

#include <stdio.h>

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

    return 0;
}

VS Codeで入力した内容と一致しているか確認しましょう。

catは、保存されたファイルの内容を表示するコマンドです。Cプログラムを実行しているわけではありません。そのため、ここではあいさつのメッセージだけでなく、ソースコード全体が表示されます。

図3:エディターの内容と保存したファイルを確認する

この図から分かること

エディターで入力した内容は、保存することでファイルへ反映されます。

catで表示されるのは、保存済みのファイルの内容です。エディターの表示と一致していれば、次のコンパイルへ進む準備ができています。

ファイルの作成で困ったときは

hello.cが見つからない

次の点を確認してください。

  • VS Codeでファイルを保存したか。
  • 保存先がchap02になっているか。
  • ターミナルの現在位置が/c/c-mysql/chap02になっているか。
  • ファイル名がhello.cになっているか。

VS Codeでhello.cを開いていても、ターミナルの現在位置が同じ場所とは限りません。pwdで確認しましょう。

hello.c.txtになっている

VS Codeのエクスプローラーでファイル名を確認し、hello.cへ変更します。

拡張子を変えることは、ファイルの名前を整える操作です。内容がC言語として正しいかどうかは、後でGCCによって確認します。

catで古い内容や何もない状態が表示される

編集内容が保存されていないか、別のファイルを編集している可能性があります。

VS Codeで開いているファイルの保存先を確認し、Ctrl+Sを押してから、もう一度cat hello.cを実行してください。

hello.exeがまだ存在しない

この記事では、hello.cを作成して保存したところまでです。

hello.exeは、次の記事でGCCを使って作成します。今の段階で存在しなくても問題ありません。

次はhello.cをコンパイルする

C:\c-mysql\chap02\hello.cを保存し、UCRT64から内容を確認できたら、最初のソースファイルの準備は完了です。

次の記事では、簡潔なGCCコマンドを使ってhello.exeを作成します。自分で書いたCプログラムを、Windowsで実行できる形へ変換していきましょう。

Follow me!