C言語基礎からマスター2-printfから学ぶ「関数」-

C言語基礎からマスター

はじめに

前回は、C言語のプログラムを書いて実行する環境をつくっていきました。

今回からC言語の文法に入っていきます。

プログラムの勉強を始めるとほとんど最初の練習プログラムは「Hello World」を表示するところからが多いと思います。

だいたいは表示して終わりなのですが、ここでは、この「Hello World」を表示するプログラムをひも解いてC言語の文法を学んでいきます。

このブログシリーズは、C言語文法の基礎を例題プログラムから学んでマスターしていくものです。

それでは、はじめていきます。

前回の復習

前回は、test.cというファイルを作成してそこにC言語のプログラムを書いていきました。

test.cファイルには次のようなプログラムが書かれています。

このプログラムをコマンドプロンプトで実行すると「Hello World!!」が表示されます。

実行の詳しいやり方は、前回を確認してみてください。

では、実際にこのプログラムに書かれている内容についてみていきたいと思います。

関数

C言語プログラムには必ずひとつ以上の「関数」が存在します。

「関数」とは、機能をひとまとまりに記述した処理群のことをいいます。

例えると作りたい料理があって、その料理の食材をひとつの袋に詰め込んだときの袋のようなものです。この例えでの料理が実現したい機能で、食材ひとつひとつが演算処理、袋が関数にあたります。

実際のプログラムに戻ると、test.cに書かれている中括弧{}で囲われている部分が関数の中身です。

関数には、名前を付けます。このプログラムの関数名は、mainという名前の関数になります。

main()
{
  printf("Hello World!!");
}

main関数は特殊な関数で、これからつくるC言語プログラムでは、必ず必要となる関数です。 というのもC言語プログラムでは、mainという関数名から処理を開始するという決まりになっているからです。

ということで、プログラムを書くとき

main()
{

}

の形をまず作ります。

このプログラムを実行すると{ }で囲われたプログラムが実行されます。

なので、あとはやりたいことをこの{ }の中に書いていくとなります。

printfという関数

test.cにはもうひとつ関数が使われています。

それがprintfという関数です。

関数は自分で名前をつけて好きなように作ることができます。

ですが、よく使うような基本的な処理を全て自力でいちから作るのは大変です。

そこでライブラリというものを利用します。

その名の通りいろいろな機能がそろった関数が貯蔵された図書館のようなものをイメージするとわかりやすいでしょうか。

ライブラリは、キーボードやファイルからデータを入力したり、画面やファイルにデータを出力したりするような入出力に関するものや数学演算に関するもの、例えば数値の絶対値を求める演算やサイン、コサイン、タンジェントの値を求める演算などがあり、このような機能をひとつのパッケージとして提供します。

printfという関数は、ライブラリの標準入出力(Standard InputOutput)をパッケージにしたstdio.hというファイルに入っていて、指示した内容を画面上に出力する機能を提供します。

なので、処理した結果を画面上に表示させたいとなったときに、画面に表示するためのプログラムを自分で作らなくてもprintfという関数を呼び出すだけでよいわけです。

ただし、printfのようなライブラリに入った関数を使うにはC言語文法のルールがあります。

それは、printf関数の入ったライブラリstdio.hを使うので作成するプログラムの中に取り込んでくださいということを書くというルールです。

#include <stdio.h>

という部分がその記述になります。

ライブラリの呼び込みには、「#include」というキーワードを使います。

そして、ライブラリファイルを「< >」で囲います。

これがライブラリを呼び込むためのルールです。

この記述によってstdioという標準入出力に関する機能の入ったライブラリが作成するプログラムに取り込まれて、printf関数をプログラムで使うことができるようになります。

ここでstdio.hの「.h」という拡張子ですが、この拡張子の付いたファイルをヘッダファイルと呼んでいます。

C言語では、「.c」という拡張子を付けたファイル(ソースファイル)に処理を記述しますが、それとともに「.h」の拡張子をもつヘッダファイルも作成します。ヘッダファイルには、処理以外の部分、詳しくはもう少しC言語文法を学んでからとなりますが、定数やプロトタイプ宣言というようなものを書くために用意します。

C言語プログラムは、処理を記述する「.c」というソースファイルと処理以外を記述する「.h」というヘッダファイルから構成されます。ただしヘッダファイルは、作らなくても問題はありません。

printfプログラムの解説

さて、プログラムに戻ります。

#include <stdio.h>

main()
{
    printf("Hello World!!");
}

1行目でprintf関数を使うためにstdio.hという標準入出力を扱うライブラリを読み込んでいます。

そしてmain関数の形をつくって、main関数の{ }で囲われた中につくりたいプログラムを書いていきます。ここでは、printf関数を呼び出すという処理を書いています。

printf関数には、指示した内容を画面上に出力するという機能があります。

画面上に文字を表示させたい場合は、printf()の()の中にダブルクォーテーション「””」で表示させたい文字を囲います。

そして、行の最後にセミコロン「;」を付けて一行を終えます。

C言語では、一行の処理の終わりに必ずセミコロン「;」を付けるルールとなっています。

ここまで作成したプログラムをコンパイルして実行すると「Hello World!!」という文字が画面上に表示されると思います。

コンパイルとプログラムの実行はDeveloper Command Promptで次のように入力します。

C:\prog\c>cl test.c
C:\prog\c>test

コンパイルの実行で、test.extとtest.objが出力されたと表示されます。

/out:test.ext
test.obj

この時点で実行ファイルtest.exeがtest.cと同じフォルダ内に作成されています。

この実行ファイルのファイル名textを実行することで作成したプログラムを動かすことができます。

コメント

これからC言語プログラムを作成していく中でコメントを書くということが必要になってくるかと思います。C言語を含むプログラム言語には、記述した文字列をプログラムとして解釈しないルールが組み込まれています。C言語では、その記述を「//」と「/**/」で表現します。

下の例のように「//」を記述した後に続く文字列は、その行の終わりまですべてプログラムとして扱われません。ですので、スラッシュを2つ続けて書いた後は日本語を含めた文字を書くことができます。これを利用して、プログラム上にコメントを残すことができます。

コメントは、「//」の他に「/**/」という記号も使えます。この記号によるコメント文は、「/*」から「*/」までの間がコメントとして扱われます。複数行にわたってコメントを書きたい場合は、こちらを使うと便利です。

#include <stdio.h>

/*
関数名:main
*/
main()
{   //画面出力
    printf("Hello World!!");
}

コメントには、記述したプログラムの機能や役割、意図、目的などを書いておきます。それによって他の人が見た時やしばらくしてから自分でプログラムを見返したときに理解しやすくなります。ただし、コメントを長く書いてしまうとプログラムが逆に追いにくくなってしまうということもあるので、コメントは端的にわかりやすく書いておくことが大切です。

まとめ

実行結果は期待通りでしたでしょうか。もしエラーが出たらもう一度プログラムを見直してみてください。よくあるのは、スペルミス、行の最後に付ける「;」の付け忘れやセミコロンがコロン「:」になっている、スペースに全角スペースが使われているなどがあります。チェックしてみましょう。

C言語文法の教材によっては、「関数」を取り扱うセクションが教材の中盤から後半あたりに出てきます。

テストプログラムをつくるにあたって必ず関数は出てきます。ということで、まずは「関数」から学んでいくという流れもよいかと個人的には思っています。

そういう流れで次回は、『独自関数をつくってみる』というテーマで関数のつくりをより詳細に解説していきたいと思います。関数をつくるうえで必要となる型や変数、演算子というC言語文法についても解説していきます。

新・明解C言語 入門編 第2版 [ 柴田望洋 ]

価格:2,530円
(2022/9/4 21:34時点)
感想(0件)

コメント

タイトルとURLをコピーしました