https://oshiete.goo.ne.jp/remark/8916684/9823292 …
以上補足を文字オーバーで以下に記載しました。
ご回答誠にありがとうございました。
#include <stdio.h>
int kansuu();
int main()
{
int modori;
modori = kansuu();
printf("modori=%d\n", modori);
return 0;
}
int kansuu()
{
printf("kansuu de hyouji\n");
return 100;
}
以上が、参考書の正規のプログラムです。
現在C言語のreturnについて勉強中です。
理解しないと、気持ち的に参考書を前に進めてたくありません。
なので早く理解したいと思っているのですが!私的には手ごわいです。
参考書の最初ぐらいから、いきなり
説明もなくreturn 0;など白々しく記載があります。
最初のころはreturnを魔法にたとえたら「呪文みたいなものだな」みたいな
考えしかありませんでした、しかい、参考書を進めていくにしたがって、中ほどあたりから
returnが当たり前みたいに出始めました!
その後return 0;の説明が1ページしか書いていてありませんでした。
これで本当に素人は理解できるのかが不思議です。
しかし理解しないとプログラムが理解できない!ヤバイことに気づきました。
戻り値とreturnの関係って何ぞや 因果関係を勉強しないといけないのかな
以下のアドレスからそれらしきことが書いてあるような気がします。
http://detail.chiebukuro.yahoo.co.jp/qa/question …
現在ひまひま勉強中です。
悪しからず^^
No.1ベストアンサー
- 回答日時:
まずは、main() のなかに書いてある return と、それ以外の関数に書いてある return を分けて考えましょう。
※本来は、同じものなのですが。
main 以外の関数(例の場合では、int kansuu() の中にある、 return 100;)の場合は、比較的わかりやすいと思います。
この関数は、
modori = kansuu();
という形で、呼ばれて、その「結果」が、modori に代入されています。
どの値が代入されるかといえば、関数で実行された、return の次の数字になります。
int kansuu() では、最後に、return 100; が実行されるので、「呼び出された」kansuu() の値は、この、100 になります。
これが、main() 以外の関数に書かれた return の挙動です。
では、main() のなかにある return は何かといえば、これは、わかりにくいと思います。
なぜなら、「main() はどこからも呼び出されない(見かけ上)」からです。
実は、「main() はどこからも呼び出されない」というのが間違いで、おおざっぱに言えば、OSから呼び出されます。
大抵の参考書では、「Cのプログラムは、main() から実行される」と書いてあります。
これは、もう少し詳しくいえば、「OSがmain() という関数を呼び出す(本当は、ちょっと違う)」というわけです。
なので、main() に書かれている return は、(自分を呼び出した)OSに対して、値を返すために使用されます。
OSからの呼び出しなので、明示的には見えませんが、
kekka = main();
のような事になっていると思ってください。
で、OSは、ここで返された値を使うことがあります。(使わないこともあります)
使う場合、「0 なら正常終了、それ以外なら、異常」という判定のために使用する例が多いです。
なので、main() の中にある、return で、0 以外の値を指定すると、(その結果を使うOSなら)「エラーが発生した」という表示をすることが多いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 5 2023/04/27 13:20
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
typedef enumの使い方を教えて...
-
2重定義って??
-
C++のfor文について
-
C言語 宣言した変数になにも代...
-
visualstudio C# テキストボッ...
-
【#define】 defineで定義した...
-
構造体の要素すべてに対する四...
-
intとINTの違いは?
-
関数の実体定義にヘッダファイ...
-
C言語でmain関数でのreturnとexit
-
構造体を引数とする、クラス間...
-
C言語のコンパイルエラー
-
main.c:7:43: warning: implici...
-
構造体のvectorを引数として関...
-
enumについて
-
VC6でlong longでエラー?
-
GCCで暗黙の型変換の警告を出し...
-
引数で argc argvが使用され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
C++の(左辺値)参照を参照渡し
-
構造体の宣言でエラーが出ます。
-
main()とint main(void)の違い
-
intとINTの違いは?
-
エラー「invalid conversion fr...
おすすめ情報