Bagikan melalui


Pernyataan (C) return

Pernyataan return mengakhiri eksekusi suatu fungsi dan mengembalikan kontrol ke fungsi panggilan. Eksekusi dilanjutkan dalam fungsi panggilan pada titik segera setelah panggilan. Pernyataan return dapat mengembalikan nilai ke fungsi panggilan. Untuk informasi selengkapnya, lihat Tipe return.

Sintaks

jump-statement:
returnexpressionMemilih ;

Nilai expression, jika ada, dikembalikan ke fungsi panggilan. Jika expression dihilangkan, nilai pengembalian fungsi tidak ditentukan. Ekspresi, jika ada, dievaluasi dan dikonversi ke tipe yang dikembalikan oleh fungsi. Ketika pernyataan return berisi ekspresi dalam fungsi yang memiliki tipe pengembalian void, kompilator akan menghasilkan peringatan dan ekspresi tidak dievaluasi.

Jika tidak ada pernyataan return yang muncul dalam definisi fungsi, kontrol secara otomatis kembali ke fungsi pemanggil setelah pernyataan terakhir dari fungsi yang dipanggil dieksekusi. Dalam hal ini, nilai pengembalian dari fungsi yang dipanggil tidak terdefinisi. Jika fungsi memiliki tipe pengembalian selain void, maka itu adalah bug yang serius dan kompilator akan mencetak pesan diagnostik peringatan. Jika fungsi memiliki tipe pengembalian void, perilaku ini boleh saja, tetapi dapat dianggap sebagai gaya yang buruk. Gunakan pernyataan return biasa untuk memperjelas niat Anda.

Sebagai praktik rekayasa yang baik, selalu tentukan tipe pengembalian untuk fungsi Anda. Jika nilai pengembalian tidak dibutuhkan, deklarasikan bahwa fungsi memiliki tipe pengembalian void. Jika tipe pengembalian tidak ditentukan, kompilator C akan mengasumsikan tipe pengambalian default int.

Banyak programmer menggunakan tanda kurung untuk mengapit expression argumen return pernyataan. Namun, C tidak memerlukan tanda kurung.

Kompilator dapat mengeluarkan pesan diagnostik peringatan tentang kode yang tidak dapat dijangkau jika kompilator menemukan pernyataan apa pun yang ditempatkan setelah pernyataan return.

Dalam fungsi main, pernyataan dan ekspresi return bersifat opsional. Hal yang terjadi pada nilai yang dikembalikan, jika ditentukan, tergantung pada implementasinya. Khusus Microsoft: Implementasi Microsoft mengembalikan nilai ekspresi ke proses yang menjalankan program, seperti cmd.exe. Jika tidak ada ekspresi return yang diberikan, runtime Microsoft C akan mengambalikan nilai yang menunjukkan keberhasilan (0) atau kegagalan (nilai bukan nol).

Contoh

Contoh berikut adalah satu program dalam beberapa bagian. Contoh ini menunjukkan pernyataan return, dan bagaimana pernyataan itu digunakan untuk mengakhiri eksekusi fungsi, serta secara opsional untuk mengembalikan nilai.

// C_return_statement.c
// Compile using: cl /W4 C_return_statement.c
#include <limits.h>      // for INT_MAX
#include <stdio.h>       // for printf

long long square( int value )
{
    // Cast one operand to long long to force the
    // expression to be evaluated as type long long.
    // Note that parentheses around the return expression
    // are allowed, but not required here.
    return ( value * (long long) value );
}

Fungsi square mengembalikan kuadrat argumennya, dalam tipe yang lebih luas untuk mencegah kesalahan aritmatika. Khusus Microsoft : Dalam implementasi Microsoft C, tipe long long cukup besar untuk menampung produk dua nilai int tanpa meluap.

Tanda kurung di sekitar ekspresi return dalam square dievaluasi sebagai bagian dari ekspresi dan tidak diwajibkan oleh pernyataan return.

double ratio( int numerator, int denominator )
{
    // Cast one operand to double to force floating-point
    // division. Otherwise, integer division is used,
    // then the result is converted to the return type.
    return numerator / (double) denominator;
}

Fungsi ratio mengembalikan rasio dua argumen int sebagai nilai double floating-point. Ekspresi return dipaksa untuk menggunakan operasi floating-point dengan mentransmisikan salah satu operand ke double. Jika tidak, operator pembagian bilangan bulat akan digunakan dan bagian pecahan akan hilang.

void report_square( void )
{
    int value = INT_MAX;
    long long squared = 0LL;
    squared = square( value );
    printf( "value = %d, squared = %lld\n", value, squared );
    return; // Use an empty expression to return void.
}

Fungsi report_square memanggil square dengan nilai parameter INT_MAX, nilai bilangan bulat bertanda terbesar yang cocok dengan int. Hasil long long disimpan dalam squared, kemudian dicetak. Fungsi report_square memiliki tipe pengembalian void, sehingga tidak memiliki ekspresi dalam pernyataan return.

void report_ratio( int top, int bottom )
{
    double fraction = ratio( top, bottom );
    printf( "%d / %d = %.16f\n", top, bottom, fraction );
    // It's okay to have no return statement for functions
    // that have void return types.
}

Fungsi report_ratio memanggil ratio dengan nilai parameter 1 dan INT_MAX. Hasil double disimpan dalam fraction, kemudian dicetak. Fungsi report_ratio memiliki tipe pengembalian void, sehingga tidak perlu mengembalikan nilai secara eksplisit. Eksekusi report_ratio "jatuh dari bawah" dan tidak mengembalikan nilai ke pemanggil.

int main()
{
    int n = 1;
    int x = INT_MAX;

    report_square();
    report_ratio( n, x );

    return 0;
}

Fungsi main memanggil dua fungsi: report_square dan report_ratio. Karena report_square tidak mengambil parameter dan mengembalikan void, kita tidak menetapkan hasilnya ke variabel. Demikian juga, report_ratio mengembalikan void, jadi kita juga tidak menyimpan nilai pengembaliannya. Setelah setiap pemanggilan fungsi ini, eksekusi dilanjutkan pada pernyataan berikutnya. Kemudian, main mengembalikan nilai 0 (biasanya digunakan untuk melaporkan keberhasilan) untuk mengakhiri program.

Untuk mengompilasi contoh, buat file kode sumber bernama C_return_statement.c. Kemudian, salin semua kode contoh dalam urutan seperti yang ditunjukkan. Simpan file, dan kumpulkan di Jendela prompt perintah pengembang dengan menggunakan perintah:

cl /W4 C_return_statement.c

Lalu, untuk menjalankan kode contoh, masukkan C_return_statement.exe di prompt perintah. Output dari contoh tersebut akan terlihat seperti ini:

value = 2147483647, squared = 4611686014132420609
1 / 2147483647 = 0.0000000004656613

Lihat juga

Pernyataan