Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の関数とは?定義・宣言・呼び出し方をサンプルコード付きで解説

C言語における関数とは、ひとつのタスクを実行するためにまとめられた文の集まりです。すべてのCプログラムには必ず少なくとも1つの関数、すなわち main() が存在し、それ以外にも必要に応じて自由に関数を追加定義できます。

コードを複数の関数へ分割する方法はプログラマーの裁量に委ねられていますが、論理的には「各関数が特定のタスクを担当する」ように設計するのが良いとされています。

関数の宣言は、コンパイラに対して関数名・戻り値の型・引数(パラメータ)の情報を伝える役割を持ちます。一方、関数の定義は、関数の実際の処理内容(本体)を記述するものです。

また、C標準ライブラリにはプログラムから直接呼び出せる組み込み関数が多数用意されています。たとえば、2つの文字列を連結する strcat() や、あるメモリ領域を別の場所へコピーする memcpy() などが代表的な例です。

なお、関数は「メソッド」「サブルーチン」「プロシージャ」などと呼ばれることもあります。

関数の定義

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

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

関数定義は「関数ヘッダー」と「関数本体」で構成され、それぞれの構成要素は次の通りです。

  • 戻り値の型(Return Type):関数は処理結果として値を返すことができます。return_type は、その返す値のデータ型を表します。値を返さない関数の場合は、キーワード void を指定します。

  • 関数名(Function Name):関数の実際の名前です。関数名と引数リストを合わせて「関数シグネチャ」と呼びます。

  • 引数(Parameters):引数は値を受け取るためのプレースホルダのようなものです。関数を呼び出す際に渡す値は「実引数(argument)」と呼ばれます。引数リストでは、引数の型・順序・個数を指定します。引数は省略可能で、引数なしの関数も定義できます。

  • 関数本体(Function Body):関数が何を行うのかを定義する文の集まりです。

サンプルコード: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 value is : 200
  1. C言語の関数の分類とは?引数と戻り値による4つのカテゴリを解説

    C言語における関数は、引数(ひきすう)の有無と戻り値(返り値)の有無という2つの観点から、以下の4つのカテゴリに分類できます。引数なし・戻り値なしの関数引数なし・戻り値ありの関数引数あり・戻り値なしの関数引数あり・戻り値ありの関数それぞれのカテゴリについて、サンプルコードと実行結果を交えながら詳しく見ていきましょう。1. 引数なし・戻り値なしの関数このタイプの関数は、呼び出し元からデータを受け取らず、計算結果も返しません。関数内で入力・処理・表示をすべて完結させるため、単純な処理に向いています。サンプルコード#include<stdio.h>main() {  

  2. C言語のbar()関数とは?グラフィックスで塗りつぶし矩形を描く方法

    bar() 関数は、C言語のグラフィックス描画に使用される関数の一つです。図形を描くための各種関数がまとめられた graphics.h ヘッダーファイルの中に定義されており、このヘッダーをインクルードすることで利用できます。bar()関数の構文void bar(int left, int top, int right, int bottom);bar() 関数は、棒グラフの「バー」のような2次元の図形、すなわち塗りつぶされた長方形を描画するために使われます。引数は4つあり、それぞれ以下の座標を指定します。left / top: 長方形の左上隅の (X, Y) 座標right / bottom: