C言語の関数プロトタイプとは?基本から役割までわかりやすく解説
関数とは、明確に定義された特定のタスクを実行する、自己完結型のプログラムブロックです。C言語で関数を正しく活用するためには、「関数プロトタイプ(プロトタイプ宣言)」の理解が欠かせません。
関数の種類
C言語の関数は、大きく以下の2種類に分類されます。
- 事前定義関数(ライブラリ関数):コンパイラや標準ライブラリにあらかじめ用意されている関数
- ユーザー定義関数:プログラマが目的に応じて独自に作成する関数
関数間のやり取り
関数同士は、引数と戻り値を使ってデータのやり取りを行います。
C言語の関数は、「戻り値のデータ型 関数名(引数リスト)」という形式で記述します。
{
ローカル変数の宣言;
実行文;
return (式);
}
例として、2つの整数を受け取ってその積を表示する関数を見てみましょう。
void mul (int x, int y)
{
int p;
p = x * y;
printf("product = %d", p);
}
関数プロトタイプとは
関数プロトタイプとは、関数の戻り値の型・関数名・引数の型をコンパイラに事前に知らせるための宣言です。主に以下の2つの方法で記述できます。
1. 引数に型を指定した関数宣言を記述する
関数宣言のコピーを作成し、引数に型を指定します。このとき、各引数の識別子(引数名)は記述しても省略しても構いません。
int func(int, float, unsigned [2]); /* 引数名を省略した形式 */ int func(int i, float f, unsigned u[2]); /* 引数名を記述した形式 */
2. 関数定義をプロトタイプ形式で記述する
関数定義そのものをプロトタイプ形式で書くことでも、関数をプロトタイプ化できます。
int func(int i, float f, unsigned u[2]) {
/* funcの処理内容 */
}
関数プロトタイプの役割
関数プロトタイプを宣言しておくことで、コンパイラは以下のような問題を検出できるようになります。
- 型の不一致の検出:プロトタイプ化された関数が、互換性のない型の引数を1つ以上指定して呼び出された場合に、エラーや警告を報告します。
- 重複宣言の整合性チェック:同じ関数に対する明示的または暗黙的な宣言が複数現れた場合、コンパイラは重複した宣言を慎重に精査し、宣言間の矛盾を検出します。
このように、関数プロトタイプを適切に活用することで、引数の型や数の誤りをコンパイル段階で早期に発見でき、より安全で信頼性の高いCプログラムを作成することができます。
-
C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説
C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1
-
C言語のstrcpy()関数とは?基本構文と使い方をわかりやすく解説
C言語のライブラリ関数 char *strcpy(char *dest, const char *src) は、src が指し示す文字列を dest にコピーするための関数です。 C言語では、文字の配列のことを「文字列」と呼びます。 文字列の宣言 文字列(文字配列)の宣言は、以下の形式で行います。 char stringname[size]; 例えば char string[50]; と宣言すると、最大50文字の文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に以下の2つの方法があります。 1. 文字定数を使う方法 char string[10] = {H,