関数が戻り値を返す場合は、これまでvoidとしていた戻り値型を、適切な型に設定しなければなりません。int型を返す関数は、次のようになるでしょう。

int func(void) { ... }

このコードは、int型の結果を返す、パラメータを受け取らないfunc()関数を作成します。もちろん、パラメータを受け取って戻り値を返す形でもかまいません。戻り値を返す関数の本体は、必ずreturn文を使って値を返すようにしましょう。return文の構文は、次のようになります。

return 式opt ;

return文は、break文や continue文と同じ分岐文の一種です。return文が実行されると、現在の関数の実行を終了し、関数の呼び出し元に復帰します。これまでも、main()関数の最後に return文を指定してきました。return文には、パラメータとして任意の式を与えることができます。この式の結果が、関数の戻り値として呼び出し元に返されます。よって、式の結果は関数の戻り値型と一致しなければなりません。また、戻り値を持たない関数では、式を持つreturn文は指定できません。

サンプル04

#include <stdio.h>

int add(int x, int y)
{
    return x + y;
}

int main(void)
{
    int result;

    result = add(10, 20);
    printf("result=%d\n", result);
    return 0;
}

実行結果

サンプル04の実行結果

サンプル04は、2つのパラメータを受け取り、これらの値を加算した結果を戻りとして返すadd()関数を作成しています。main()関数内でadd()関数を呼び出し、パラメータから10と20という2つの値を渡しています。add()関数内では、受け取ったパラメータを算術演算子で加算した結果を return文で返しているだけです。再びmain()関数に制御が戻るとadd()関数の結果としてresult変数に戻り値が代入されます。実行結果を見れば、result変数にadd()関数の戻り値が正しく格納されていることが確認できます。

上記のサンプルでは、int型のパラメータを受け取り、int型の結果を返す単純な関数を作りましたが、もちろんint型以外の値を受け渡しすることも可能です。char型、double型、または構造体型でもかまいません。ただし、配列型を戻り値として返すことはできません。