C言語には、プログラミングを助けてくれる便利な「道具」がたくさん詰まった標準ライブラリというものが用意されています。画面に文字を表示する printf
も、このライブラリに含まれる関数の一つです。
これらの便利な関数を使いこなすには、いくつかの基本的なルールを理解する必要があります。この記事では、①関数を使うための準備 (#include
)、②関数の正しい使い方(引数と戻り値)、そして③プログラムの作法 (main
関数とreturn 0
) について、分かりやすく解説します。
1. 関数を使うための準備 #include
C言語の便利な関数を使うためには、まず「これから〇〇という道具箱(ヘッダーファイル)に入っている関数を使いますよ」と、コンパイラに知らせる必要があります。その役割を果たすのが #include
という命令です。
#include <stdio.h>
は、「standard input/output(標準入出力)」に関する関数(printf
や scanf
など)が収められた stdio.h
というヘッダーファイルを読み込む、という意味です。
#include <stdio.h> // printf, scanf などの関数を使うため
#include <stdlib.h> // 乱数生成(rand)やメモリ管理の関数を使うため
#include <time.h> // 時間に関する関数(time)を使うため
このように、使いたい関数に応じて、必要なヘッダーファイルをプログラムの先頭に記述します。
2. 関数の正しい使い方:引数と戻り値
関数は、それぞれ決まった使い方(インターフェース)があります。それを理解する鍵が**「引数(ひきすう)」と「戻り値(もどりち)」**です。
- 引数 (Argument) 関数に渡す「材料」や「情報」のことです。関数はこの引数を使って処理を行います。
- 戻り値 (Return Value) 関数が処理を終えた後に返してくる「結果」のことです。
実践例:乱数を生成する関数 rand
, srand
例として、ランダムな数値を生成する関数を使ってみましょう。
srand
関数:乱数の種をまく
コンピュータは純粋なランダムを作り出すのが苦手なため、rand()
関数は毎回同じパターンの数値を返してしまいます。これを避けるために、最初に一度だけ srand
関数を呼び出し、乱数の発生パターンを初期化します。
- 関数の仕様:
void srand(unsigned int seed);
- 引数:
unsigned int seed
→ 乱数の「種」となる符号なし整数を1つ渡す。 - 戻り値:
void
→ 何も返さない。
- 引数:
毎回異なる乱数を生成するために、現在の時刻を「種」として与えるのが一般的です。現在の時刻は time(NULL)
で取得できます。
#include <stdlib.h> // srand, rand のため
#include <time.h> // time のため
// 現在時刻を種にして、乱数生成器を初期化する
srand(time(NULL));
rand
関数:乱数を取得する
srand
で初期化したら、rand
関数で実際に乱数を取得します。
- 関数の仕様:
int rand(void);
- 引数:
void
→ 何も渡す必要がない。 - 戻り値:
int
→ 整数型の乱数を1つ返す。
- 引数:
int random_number;
// rand()関数を呼び出し、戻り値を変数で受け取る
random_number = rand();
3. main
関数とreturn 0;
の意味
main
関数
int main(void)
は、Cプログラムを実行したときに最初に呼び出される、特別な関数です。全ての処理はここから始まります。
return 0;
return 0;
は、main
関数がOS(Operating System)に対して「プログラムは正常に終了しました」と伝えるための、お決まりの作法です。main
関数の戻り値の型がint
なので、整数値0
を返しているのです。もしプログラムが異常終了した場合は、0
以外の数値を返すこともあります。
まとめ:乱数を表示するプログラム
これまでの知識を総動員して、1から6までのサイコロを振るようなプログラムを書いてみましょう。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int dice_roll;
// 1. 乱数生成器を初期化する(プログラム実行中に1回だけ)
srand(time(NULL));
// 2. 乱数を取得する
// rand() が返す値を6で割った余り (0〜5) に1を足す
dice_roll = rand() % 6 + 1;
// 3. 結果を表示する
printf("サイコロの目は %d でした!\n", dice_roll);
// 4. プログラムが正常に終了したことを示す
return 0;
}
このように、使いたい関数の①必要なヘッダーファイルをincludeし、②引数と戻り値のルールを守って呼び出すことで、C言語の豊富な機能を活用することができます。