C言語には、関数の値を返す時などに使われるreturn文というのがあります。
return文はそれ以外にもmain関数の最後にも書かれています。
この記事では、return文について、
 
- return文の意味
 - return文を使って戻り値を返す方法
 - ポインタを使って複数の戻り値を返す方法
 - return文で条件によって関数の処理を終了させる方法
 - 「return 0」と「return 1」の意味
 
などの応用的な使い方についても解説していきます。
return文とは
return文とは、関数を実行した結果とともに、関数を終了したいときに呼ばれる文のことです。
return文によって関数の呼び出し元にデータを渡すことを、値を返すと言います。また、その時に関数が返す値のことを戻り値と言います。
return文は次のように書きます。
return 戻り値;
また、戻り値をなしにしたいときは
return ;
のように書きます。
return文で戻り値を返す方法
return文は、関数が何らかの値を返す時や、関数の処理を終わらせたいときなどに使われます。
例えば、”Samurai”という文字列を返して欲しい場合は、次のように使用します。
#include <stdio.h>
char *SamuraiEngineer() {
    return "Samurai";
}
int main(void) {
    printf("%s\n", SamuraiEngineer());
    return 0;
}
実行結果:
Samurai
このように、return文を使うことで、文字列などの値を返すことができます。
ポインタを使って複数の戻り値を返す方法
ここまで、return文を使って関数から1つ戻り値を受け取ることができました。
では、複数の戻り値が欲しい場合には、どうすれば良いのでしょうか?
実はC言語は、return文で複数の戻り値を渡すことができません。配列を使う方法もありますが、今回はポインタを使って解決します。
ポインタとは、変数がどこにいるのかを指し示す変数のことです。ポインタの値が変わると、ポインタが指す値も変わります。
アドレスを引数として使うことで、元々の変数の値も変えることができます。それにより、複数の戻り値を得ることができます。
例えば、2つの値を交換する時に使うことができます。
#include <stdio.h>
void swap(int *x, int *y) {
    int tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}
int main(void) {
    int num1 = 123;
    int num2 = 456;
    printf("交換前:num1 = %d, num2 = %d\n", num1, num2);
    swap(&num1, &num2);
    printf("交換後:num1 = %d, num2 = %d\n", num1, num2);
    return 0;
}
実行結果:
交換前:num1 = 123, num2 = 456 交換後:num1 = 456, num2 = 123
このように、ポインタを使うことで擬似的に複数の値を返すことができます。
ポインタについて詳しく知りたい方は、こちらの記事で解説しているのでぜひ確認してください!
            
                
                    
return文で条件によって関数の処理を終了させる方法
return文には、値を返すだけではなく、関数の処理を終了させることもできます。これを使うことで、条件によって関数の処理を途中で終了させることができます。
例えば、入力された値によって関数の処理を変えたいときに使われます。
以下のサンプルコードでは、値が1~10の範囲にあるかどうかを調べています。
#include <stdio.h>
char *checkNum(int num) {
    if (num > 10) {
        return "値が大きすぎます。";
    }
    if (num < 1) {
        return "値が小さすぎます。";
    }
    return "1~10の値です";
}
int main(void) {
    int num;
    num = 3;
    printf("num = %d, 結果:%s\n", num, checkNum(num));
    num = 100;
    printf("num = %d, 結果:%s\n", num, checkNum(num));
    num = -100;
    printf("num = %d, 結果:%s\n", num, checkNum(num));
    return 0;
}
実行結果:
num = 3, 結果:1~10の値です num = 100, 結果:値が大きすぎます。 num = -100, 結果:値が小さすぎます。
このように、return文を使うことで、条件によって、関数の処理を終了させることができます。
「return 0」と「return 1」の意味とは?
さて、これまでのコードを見ていると、main関数にもreturn文が書かれているのがわかると思います。
main関数の最後には、
return 0;
と書かれています。
このreturnの意味は、0を返せば正常終了、0以外なら異常終了という意味です。
return文とexit関数の違い
return文で、関数の処理を終了させることができました。
しかし、exit関数を使っても処理を終了させることができます。
return文では、関数の処理を終了し、値を返すことができるのに対して、exit関数とは、呼び出された瞬間に、プログラム全体の処理を終了させる関数です。
実際に、サンプルコードで確認して見ましょう。
#include <stdio.h>
#include <stdlib.h>
char *exitMessage() {
    printf("正常終了します。\n");
    exit(0);
}
int main(void) {
    exitMessage();
    printf("ここは表示されません。\n");
    return 0;
}
実行結果:
正常終了します。
このように、exit関数を使うことで、プログラム全体の処理を終了させることができます。
関数の使い方総まとめ
この記事では関数の戻り値を返すreturn文について解説しましたが、関数の様々な使い方については次の記事で詳しく解説しているので、ぜひ確認してください。
            
                
                    
まとめ
いかがでしたか?
今回は、return文について解説しました。
return文はC言語の基本ですのでぜひ覚えてください。
もし、return文を使って値を返す方法を忘れてしまったらこの記事を確認してください!
  





