6-1 関数

この記事は約4分で読めます。

関数とは

C言語にはまとまった一定の処理を関数としてまとめる機能があります。同じ処理を何回も行いたいときは、関数を作っておけば同じプログラムを何回も書かなくても関数を呼び出すだけで処理が行えます。例えばprintf,scanfは画面に文字を出力またはキーボードから入力する機能を持つ関数です。printfのようにあらかじめ用意されている関数もありますが、自分で新しく関数を作る(=定義する)こともできます。関数を新しく作る時は関数がどんな値を受け取るか、どんな値を返すかを決める必要があります。受け取る値のことを引数、返す値のことを返り値(返却値、戻り値とも)と言います。

返却値の型 関数名(引数){
	//何らかの処理
}

この形をどこかで見たことがないでしょうか?実は、今まで私たちはプログラム中でmain関数を作って来ました。

int main(void){
	//何らかの処理
	return 0;
}

一つのファイルにいくつでも関数を作ることができますが、関数がたくさんあるとどれを始めに実行していけばいいか分からなくなります。そこで、mainという名前の関数を初めに実行するというルールがあります。よって、C言語のプログラムを作成するときは必ず一回だけmain関数を定義する必要があります。

main関数の正体

先ほど説明した通り関数を作るには関数名以外に返却値の型と引数を指定する必要があります。

返却値の型 関数名(引数){}
int main(void){ ... return 0;}

main関数の定義にintと付いているのでint型の値を返却するという意味です。main関数は必ずint型にする必要があります。voidは引数を受け取らないという意味です。今まで作ってきたmain関数は引数を受け取らないのでvoidとしてきました。値を返却するには、return文を使用します。上の擬似コードでは、0を返しています。main関数から返却した値はOSが受け取ります。返却した値によって処理が成功したか失敗したかを伝える役目があります。処理に成功した場合は0を、失敗した場合は-1を返すことが多いです。

関数を作ってみる

#include <stdio.h>
void printstr(void){
	puts("printstr関数です。");
}
int main(void){
	puts("main関数です。");
	printstr();
	return 0;
}

実行結果

main関数です。
printstr関数です。

printstr関数を定義しmain関数から呼び出しました。自作関数を呼び出すときもprintf関数と同じように関数名にカッコをつけて呼び出します。printstr関数は引数を受け取らないので呼び出す時も引数を指定する必要はありません。また何も値を返さない時は関数の返却値の型をvoidとします。

#include <stdio.h>
void printint(int a){
	printf("print関数です。a=%d\n",a);
}
int nijou(int n){
	int ans;
	puts("nijou関数です。");
	ans=n*n;
	return ans;
}
int main(void){
	int ans;
	puts("main関数です。");
	printint(3);
	ans=nijou(5);
	printf("nijou(5)の戻り値:%d\n",ans);
	return 0;
}

実行結果

main関数です。
print関数です。a=3
nijou関数です。
nijou(5)の戻り値:25

nijou関数はint型の値を受け取ってその値の2乗を計算し返却します。main関数では、nijou関数が返却した値を変数ansに入れ、printf関数で表示しています。

まとめ

まとまった処理の単位を関数として表す。

C言語のプログラムでは、必ず一つだけmain関数を定義しないといけない。

自分で関数を作成する場合は返却値の型と引数の型を指定する必要がある。

コメント