C++のreturn文とは?関数の終了と戻り値を初心者向けに徹底解説!
生徒
「C++のコードを見ていると、最後に必ず『return 0;』って書いてありますけど、これってどんな意味があるんですか?」
先生
「それは『return文(リターンぶん)』といって、プログラムの処理を終わらせたり、結果を報告したりするためのとても大切な命令なんですよ。」
生徒
「終わらせるだけじゃなくて、結果を報告する……?なんだか難しそうですね。」
先生
「いえいえ、仕組みさえ分かれば簡単です!関数の終了タイミングや、値の返し方について詳しく解説しますね。」
1. return文とは?基本的な役割を理解しよう
C++のプログラムにおいて、return文(リターンぶん)は、現在実行している「関数(かんすう)」の処理を終了させ、呼び出し元に制御を戻すための命令です。関数とは、特定の作業をひとまとめにした「命令のセット」のようなものだと考えてください。プログラムはこの関数を呼び出すことで動きますが、その作業が完了したことを知らせるのがreturn文の役割です。
また、ただ終了するだけでなく、作業の結果として得られた「値」を呼び出し元に渡すこともできます。これをプログラミング用語で戻り値(もどりち)または返り値(かえりち)と呼びます。SEOの観点からも、「C++ return文 役割」を検索する初心者の方は多いですが、まずは「仕事を終えて報告に戻る」というイメージを持つことが重要です。
2. パソコン未経験でもわかる!「お使い」の例えで解説
プログラミングを全くやったことがない方のために、日常生活の「お使い」で例えてみましょう。あなたが誰かに「コンビニでお茶を買ってきて」と頼まれたとします。この「お使い」という一連の作業が、プログラミングでいうところの「関数」です。
あなたがコンビニでお茶を買い、頼んだ人のところへ戻って「はい、お茶です」と渡す動作。これがまさにreturnです。ここで渡した「お茶」が「戻り値」になります。もしコンビニにお茶が売っていなくて手ぶらで戻ったとしても、「帰ってきた」という事実だけで、依頼主は「あ、お使いが終わったんだな」と判断できますよね。このように、作業の終了を伝えることは、プログラムの流れを管理する上で欠かせないのです。
3. 数値を返す関数の作り方と使い方
それでは、実際に数値を返す簡単なプログラムを見てみましょう。二つの数字を足して、その結果を報告する関数を作ってみます。C++では、関数の名前の前に「どんな種類のデータを返すか(データ型)」を書くルールがあります。整数を返すならint(イント)と書きます。
#include <iostream>
// 二つの数字を足して、その結果を「戻り値」として返す関数
int add(int a, int b) {
int sum = a + b;
return sum; // ここで関数の処理が終了し、合計値を報告します
}
int main() {
int result = add(10, 20); // add関数を呼び出し、戻り値をresultに受け取る
std::cout << "計算結果は " << result << " です。" << std::endl;
return 0; // main関数の終了をOSに報告
}
実行結果は以下のようになります。
計算結果は 30 です。
このプログラムでは、add関数の中でreturn sum;が実行された瞬間に、add関数の仕事は終わり、メインの処理(main関数)に数字の「30」を持って戻ります。これによって、計算結果を利用した表示などが可能になります。
4. 関数の終了タイミングと「到達不能なコード」
return文の最も大切な性質は、「実行された瞬間に、その関数の残りの処理はすべて無視される」という点です。どれだけ長い命令が下に続いていても、returnに出会った瞬間に、プログラムはその関数から脱出します。
もし、returnの後に命令を書いても、それは絶対に実行されません。このようなコードを専門用語で到達不能なコード(Dead Code)と呼びます。初心者の方がよくやってしまうミスとして、処理が終わっていないのに途中でreturnを書いてしまうことがありますが、これでは後半の処理が動かなくなるため注意が必要です。Google検索で「C++ プログラム 動かない」と悩む原因の多くが、この終了タイミングの勘違いにあります。
#include <iostream>
void testFunction() {
std::cout << "このメッセージは表示されます。" << std::endl;
return; // ここで関数終了!
// 以下の行は、returnの後にあるため絶対に実行されません
std::cout << "このメッセージは表示されません。" << std::endl;
}
int main() {
testFunction();
return 0;
}
出力結果です。
このメッセージは表示されます。
5. 条件によって終了タイミングを変える(早期リターン)
if文と組み合わせることで、「ある条件のときだけ、すぐに関数を終了させる」という使い方ができます。これをプログラミングの世界では早期リターン(アーリーリターン)と呼び、複雑なプログラムを読みやすくするためのテクニックとして重宝されています。
例えば、年齢をチェックする関数で「20歳未満なら、その先の処理をせずに入場を断る」といった動きが作れます。これによって、不必要な処理をコンピュータにさせなくて済むため、効率的で分かりやすい「きれいなコード」になります。
#include <iostream>
void checkAge(int age) {
if (age < 20) {
std::cout << "未成年の方は入場できません。" << std::endl;
return; // 条件に合致したので、ここで処理を切り上げて終了
}
// 20歳以上のときだけ、以下の処理までたどり着けます
std::cout << "お酒の注文が可能です。いらっしゃいませ!" << std::endl;
}
int main() {
checkAge(18); // 18歳でチェック
checkAge(25); // 25歳でチェック
return 0;
}
実行結果です。
未成年の方は入場できません。
お酒の注文が可能です。いらっしゃいませ!
6. void型の関数におけるreturnの書き方
値を返さない関数のことを、C++ではvoid(ヴォイド)型と呼びます。voidは「空っぽ」という意味です。値を返さないので、本来はreturnを書かなくても、関数の最後の行まで行けば自動的に終了します。しかし、前述の「途中で終わらせたい場合」には、return;とだけ記述します。
プログラミング未経験の方は、「returnの後に何も書かないこともあるんだ」と不思議に思うかもしれませんが、これは「結果を報告するものがないけれど、とりあえず帰る」という意思表示だと捉えてください。特に検索で「C++ void return 意味」と調べる初心者の方にとって、この「値を伴わないリターン」の理解は、制御構文のマスターに不可欠です。
7. main関数における「return 0;」の特別な意味
C++のプログラムには必ずint main()という、一番最初に動き出す関数が存在します。この記事の冒頭でも触れたreturn 0;は、このメイン関数が終わるときに使われます。ここでの「0」という数字には、「このプログラムはエラーなく、無事に最後まで終わりました」という、OS(WindowsやMacなど)への報告メッセージが込められています。
もしプログラムが何らかの問題で異常終了した場合は、0以外の数字(1など)を返すのが慣例です。パソコンに詳しくない方は、おまじないのように書いているかもしれませんが、実はパソコンに対して「正常終了したよ!」と教えてあげる、とても礼儀正しいコードなのです。このreturn 0;をしっかり書くことも、プログラミングの基礎的な作法の一つと言えるでしょう。
#include <iostream>
int main() {
std::cout << "プログラムを開始します。" << std::endl;
// ここに色々な処理を書く...
std::cout << "全ての作業が完了しました。" << std::endl;
// 0を返すことで、コンピュータに「成功」を伝えます
return 0;
}
実行結果です。
プログラムを開始します。
全ての作業が完了しました。
8. return文を使いこなすためのステップ
最後に、return文を正しく使うためのポイントを整理しましょう。まずは「関数がどこで終わるか」を常に意識すること。そして、その関数が「何を報告すべきか」を明確にすることです。これらを意識するだけで、バグ(プログラムのミス)が劇的に減り、初心者から一歩抜け出したプログラマーらしいコードが書けるようになります。
最初は難しく感じるかもしれませんが、自分で関数を作ってreturnで値を返してみる練習を繰り返せば、自然と感覚が身についていきます。C++にはたくさんのルールがありますが、一つずつ丁寧に理解していけば、決して恐れる必要はありません。この記事を参考に、ぜひあなたも「戻り値」を自在に操るプログラム作りに挑戦してみてくださいね!