auの日記

プログラミング初心者の日記。(auはハンドルネームです)

PythonとC言語のreturnの違い

auです。

Pythonでプログラムを組んでいて、最後にreturunを書かない場合ってあるじゃないですか。C言語を学習した後だと、なんだか気持ち悪いというか、収まりが悪い気がしてならないです。

その時、PythonC言語でreturnを書く場合と書かない場合ってどんな風に違うんだろうと思ったので調べてみました。

参考にさせていただいたサイト
qiita.com

そもそもreturnとは

returnは、返り値といって、関数の呼び出し元にデータを渡すことを言います。returnの処理になると関数の終わりという判断になって、関数の処理が終了します。

Pythonでreturnを書かない場合

Pythonでreturnを書かない場合は、返り値を利用しない場合です。特にバグなども起きずに終わります。k

def sum(a, b):
    a + b

Pythonでreturnを書く場合

Pythonでreturnを書く場合は、返り値を利用する場合です。例だと返り値を3の倍数かを判断するのに使用しています。

def sum(a, b):
    return a + b

x = sum(1, 2)

if (x % 3) == 0:
    print('割り切れます')
else:
    print('割り切れません')

# 実行結果
割り切れます

C言語でreturnを書かない場合

参考にさせていただいた記事
qiita.com


C言語でreturnを書かない場合は、バグの原因になり得ます。returnを書かないと、関数の終わりが定義されていないため、Warningという警告文が出てしまいます。
今回のコードでは、結果が書き変わるようなバグは起きなかったですが、他のコードだとどのような結果なるかはわかりません。気をつけましょう。

main文は特殊な関数のため、returnを書かなくてもエラーは出ませんが、多分書いたほうがいいと思います。void型も同様にreturnを最後に書いたほうがいいと思います。

#include <stdio.h>

int sum(int a, int b) {
    a + b;
}

int main(void) {
    int a, b;
    a = 2;
    b = 3;
    sum(a, b);
    printf("%d\n", a + b);
}

// コンパイル
test.c:4:7: warning: expression result unused [-Wunused-value]
    a + b;
    ~ ^ ~
test.c:5:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
// 実行結果
5

C言語でreturnを書いた場合

C言語でちゃんとreturnを書いた場合は、特にエラーは出ませんでした。

returnをしてあげることにより、その関数で変数を使用するためのメモリなども解放されるため、値は消えてしまいます。複数の値を別の関数で使用する場合はポインタを使用しましょう。

program-shoshinsya.hatenablog.com

#include <stdio.h>

int sum(int a, int b) {
    return a + b;
}

int main(void) {
    int a, b;
    a = 2;
    b = 3;
    sum(a, b);
    printf("%d\n", a + b);

    return 0;
}

// 実行結果
5