応援コメント

🌞なぜvoid newmadefunction(void){printf("今日もよいC言語日和です。¥n"); return ; } と自作関数が記述されるのでしょうか?returnに注目☆」への応援コメント

  • すみません、質問なんですが戻り値がないのとあるのとではどんな違いがあるのでしょうか?
    読んでたら戻り値のメリットが無い、もしくは戻り値があってもなくても何も関係ないように感じました。
    return. にする必要性と return0にする必要性を教えて欲しいです!

    作者からの返信

    こんにちは ご質問ありがとうございます

    ソーラーといいます。

    よろしくお願いいたします。

    関数の戻り値についてですね。

    関数の戻り値というのは自分で自由に設定することができます。

    次のプログラムをみてね。🌞

    #include <stdio.h>


    int newmadefunction(void){


    printf("今日もよいC言語日和です。\n");


    return 1;

    }



    int main (void){

    newmadefunction();

    return 0;

    }

    コンパイル結果

    今日もよいC言語日和です。


    ソーラー「この👆のプログラムでは

    自作関数の戻り値

    はreturn 1;

    により

    1

    となっているのがわかります


    そして

    main関数の戻り値は

    return 0;

    より

    0

    となっているのがわかります。


    ははっ


    でも

    自作関数
    main関数であるにかかわらず

    関数の戻り値は自由に設定できるので


    次のプログラムのように

    自作関数と
    main関数の

    戻り値を設定しても

    ちゃんとコンパイルできます。


    #include <stdio.h>


    int newmadefunction(void){


    printf("今日もよいC言語日和です。\n");


    return 10000;

    }


    int main (void){

    newmadefunction();

    return 100000000;

    }

    コンパイル結果

    今日もよいC言語日和です。


    ソーラー「自作関数の戻り値が10000


    main関数の戻り値が100000000


    となっています。


    このプログラムの記述でも問題はありません。


    つまり

    関数の戻り値は自分で🐤自由に🐤設定できるんだ

    return 0;

    にこだわる必要はありません。

    例えばmain関数の戻り値をもたないようにすることもできます。

    そのプログラムは次のようになります。


    #include <stdio.h>


    int newmadefunction(void){


    printf("今日もよいC言語日和です。\n");


    return 10000;

    }


    void main (void){
    //戻り値を格納しないのでint型ではなくvoid型に変更しました
    newmadefunction();

    return ;

    }

    コンパイル結果

    今日もよいC言語日和です。

    ソーラー「main関数の戻り値を0にしなくても

    あるいは

    main関数に戻り値を持たせないようにしても

    ちゃんと

    コンパイルできます。

    ただ

    main関数が戻り値を持たない場合は

    int型からvoid型に戻り値を格納する型を変更しなくちゃだめだね。


    ではなぜ

    main関数の戻り値は0に設定されているのでしょうか?

    main関数が

    うまく実行されると

    戻り値は

    🌞🌞🌞🌞🌞🌞自分が設定した戻り値が🌞🌞🌞🌞🌞🌞

    main関数に戻されます。

    0に設定していれば0が

    1000000に設定していれば

    1000000がです。

    ここで

    戻り値0が

    main関数に返されるとします。

    コンピュータはメモリに格納しなければ

    データを取り扱えないので

    もちろん

    戻り値0はコンピュータのメモリに格納されます。


    実は

    このメモリに格納された戻り値0を閲覧する方法があり

    main関数が実行された後

    0が戻り値としてもどっているな~~

    と確認することができます。

    つまり

    戻り値0が戻っているので

    main関数がうまく実行されたのがわかるというわけです。

    うまく実行されていなければ

    別の数値が戻り値としてもどっています。

    つまり

    main関数がうまく実行されているのを確認するために

    戻り値を0

    に設定しているんだね。

    ということは

    main関数がうまく実行されたときに

    戻り値を0にするか

    戻り値を1000000

    にするかは

    どちらでも

    自分に好きなようにすればいいということになるんだよ。

    自分が確認するための数値だからね。

    やったね(´▽`*)

    一応

    慣例として

    main関数が

    うまく実行されたときの戻り値は

    0

    にしよう

    ということになっています。


    では

    C言語の世界を楽しんでください。

    立派なクリエイターにお送りしました。」



    追記

    ふたたび参上しました。


    ちょっとわかりにくいところがあると思うので

    もう少しくわしく解説してみます


    本文で

    main関数が 🌞うまく🌞


    実行されたなら戻り値0がメモリに格納されます

    という文章がありますね。

    この説明をわすれちゃってたな。

    まず

    この

    main関数が

          🌞うまく実行される🌞とは

    どういうことなのか

    これを説明したくてしたくて

    とりあえず次のプログラムをご覧ください

    #include <stdio.h>


    int main(void){

    printf("Hello, world");

    return 0;

    }


    コンパイル結果

    Hello, world

    このプログラムでは

    main関数が🌞うまく🌞実行されています

    ところで

    プログラムをコンパイルしたとき

    プログラムの記述にミスがあれば

    コンパイルエラーとなり

    プログラムの記述ミスを指摘されます。

    今のプログラムはプログラムの記述ミスがなかったため

    コンパイルエラーが表示されることもなく

    プログラムが実行されました。

    つまり

    プログラムの記述にミスはなかったというわけです。

    ここがミソなんだ~

    たとえプログラムの記述にミスがなかったとしても

    プログラムがうまく実行されない場合があります。

    プログラムの記述にミスがないのに

    プログラムがうまく実行されない場合があるの???

    と思われるかな。

    あるんです。

    たとえば極端な話ですが

    コンピュータは

    機械語にコンパイルされたプログラムを

    実行するとき

    まず

    その機械語にコンパイルされたプログラムを

    メモリに格納します。


    メモリが不足していて

    プログラムがメモリに格納できなかった場合

    そのプログラムを実行することはできません。

    もちろん

    このときは戻り値0が

    メモリに格納されることはありません。

    このときはシステムエラーの表示が

    OSによって表示されるとおもいます。

    つまり

    main関数がうまく実行されていったなら

    return 0;

    の命令文にたどり着けるので

    戻り値0が

    メモリに格納されるというわけなんだ。」




















    編集済