C 関数

関数とは、1つのタスクを一緒に実行する文のグループです。すべてのCプログラムには少なくとも1つの関数、すなわちmain関数があります。main()また、すべての単純なプログラムでも、追加の関数を定義することができます。

コードを異なる関数に分割することができます。コードをどのように異なる関数に分割するかはあなた次第ですが、論理的には通常、各関数が特定のタスクを実行するように分割されます。

関数宣言はコンパイラに関数の名前、戻り値の型、引数を伝えます。関数定義は関数の実際の本体を提供します。

C標準ライブラリは、プログラムが呼び出すことができる多くの組み込み関数を提供します。例えば、関数strcat()は2つの文字列を連結するために使われ、関数memcpy()はメモリを別の場所にコピーするために使われます。

関数には、メソッド、サブルーチン、プロシージャなど、さまざまな呼び方もあります。

関数の定義

C言語における関数定義の一般的な形式は次のとおりです。

return_type function_name( parameter list )
{
   body of the function
}

C言語では、関数は関数ヘッダと関数本体から構成されます。以下に関数のすべての構成要素を示します。

  • 戻り値の型:関数は値を返すことができます。return_typeは関数が返す値のデータ型です。一部の関数は必要な操作を実行しても値を返しません。その場合、return_type はキーワードvoid。
  • 関数名:これは関数の実際の名前です。関数名と引数リストを合わせて関数シグネチャと呼びます。
  • 引数:引数はプレースホルダーのようなものです。関数が呼び出されるとき、引数に値を渡します。この値は実引数と呼ばれます。引数リストには、関数の引数の型、順序、数が含まれます。引数はオプションであり、つまり関数が引数を含まない場合もあります。
  • 関数本体:関数本体には、関数が実行するタスクを定義する一連の文が含まれます。

例

以下はmax()関数のソースコードです。この関数は2つの引数 num1 と num2 を持ち、これらの2つの数のうち大きい方を返します。

/*関数は2つの数のうち大きい方を返す*/ int max(int num1, int num2) { /*ローカル変数の宣言*/ int result; if (num1 > num2) { result = num1; } else { result = num2; } return result; }

関数の宣言

関数宣言はコンパイラに関数名と呼び出し方法を伝えます。関数の実際の本体は別途定義することができます。

関数宣言には次の部分が含まれます。

return_type function_name( parameter list );

上で定義した関数 max() に対する関数宣言は次のとおりです。

int max(int num1, int num2);

関数宣言では、引数の名前は重要ではなく、引数の型のみが必要です。したがって、以下も有効な宣言です。

int max(int, int);

あるソースファイルで関数を定義し、別のファイルで関数を呼び出す場合、関数宣言が必要です。この場合、呼び出し側のファイルの先頭で関数を宣言する必要があります。

関数の呼び出し

C関数を作成するとき、関数が何を行うかを定義し、その後に関数を呼び出して定義したタスクを実行します。

プログラムが関数を呼び出すとき、プログラムの制御は呼び出された関数に移ります。呼び出された関数は定義されたタスクを実行し、関数のreturn文が実行されるか、関数の終わりの括弧に達すると、プログラムの制御をメインプログラムに返します。

関数を呼び出すとき、必要な引数を渡します。関数が値を返す場合は、戻り値を保存できます。例えば:

例

#include <stdio.h> /*関数の宣言*/ int max(int num1, int num2); int main () { /*ローカル変数の定義*/ int a = 100; int b = 200; int ret; /*関数を呼び出して最大値を取得*/ ret = max(a, b); printf( "Max value is : %d\n", ret ); return 0; } /*関数は2つの数のうち大きい方を返す*/ int max(int num1, int num2) { /*ローカル変数の宣言*/ int result; if (num1 > num2) result = num1; else result = num2; return result; }

max() 関数と main() 関数を一緒に置いて、ソースコードをコンパイルします。最終的な実行可能ファイルを実行すると、次の結果が生成されます。

Max value is : 200

関数の引数

関数が引数を使用する場合、引数の値を受け取る変数を宣言する必要があります。これらの変数は関数の仮引数。

仮引数は関数内の他のローカル変数と同様に、関数に入るときに作成され、関数を出るときに破棄されます。

関数を呼び出すとき、関数に引数を渡す方法は2つあります。

呼び出しの種類説明
値渡しこの方法は引数の実際の値を関数の仮引数にコピーします。この場合、関数内で仮引数を変更しても実引数には影響しません。
参照渡しポインタ渡しの方法では、仮引数は実引数のアドレスを指すポインタです。仮引数へのポインタ操作は、実引数自体への操作に相当します。

デフォルトでは、Cは値渡しを使用して引数を渡します。一般的に、これは関数内のコードが関数呼び出しに使用された実引数を変更できないことを意味します。

その他の拡張