Bagikan melalui


Pernyataan (C) switch

Pernyataan switch dan case membantu mengontrol operasi kondisional dan percabangan yang kompleks. Pernyataan switch tersebut mentransfer kontrol ke pernyataan dalam isinya.

Sintaks

selection-statement:
switch ( expression ) statement

labeled-statement:
case constant-expression : statement
default : statement

Keterangan

Pernyataan switch menyebabkan kontrol ditransfer ke salah satu labeled-statement dalam isi pernyataannya, tergantung nilai expression.

Nilai expression dan masing-masing constant-expression harus memiliki jenis integral. constant-expression harus memiliki nilai integral konstanta yang tidak ambigu pada waktu kompilasi.

Kontrol meneruskan ke pernyataan case yang nilai constant-expression cocok dengan nilai expression. Pernyataan dapat switch mencakup sejumlah instans case. Namun, tidak ada dua nilai constant-expression dalam pernyataan switch yang sama yang dapat memiliki nilai yang sama. Eksekusi isi pernyataan switch dimulai pada pernyataan pertama di atau setelah pencocokan labeled-statement. Eksekusi berlanjut sampai akhir tubuh, atau sampai pernyataan break mentransfer kontrol keluar dari isi.

Penggunaan pernyataan switch biasanya terlihat seperti ini:

switch ( expression )
{
    // declarations
    // . . .
    case constant_expression:
        // statements executed if the expression equals the
        // value of this constant_expression
        break;
    default:
        // statements executed if expression does not equal
        // any case constant_expression
}

Anda dapat menggunakan pernyataan break untuk mengakhiri pemrosesan pernyataan berlabel tertentu dalam pernyataan switch. Ini bercabang ke akhir pernyataanswitch. Tanpa break, program berlanjut ke pernyataan berlabel berikutnya, menjalankan pernyataan sampai break atau akhir pernyataan tercapai. Kelanjutan ini mungkin diinginkan dalam beberapa situasi.

Pernyataan default dijalankan jika tidak ada case constant-expression nilai yang sama dengan nilai expression. Jika tidak ada pernyataandefault, dan tidak ditemukan kecocokan case, tidak ada pernyataan dalam isi switch yang dieksekusi. Mungkin ada paling banyak satu pernyataan default. Pernyataan default tidak harus berada di akhir. Pernyataan dapat muncul di mana saja dalam isi pernyataan switch. Label case atau default hanya dapat muncul di dalam pernyataan switch.

Jenis switch expression dan case constant-expression harus integral. Nilai masing-masing case constant-expression harus unik dalam isi pernyataan.

Label case dan default dari switch isi pernyataan hanya signifikan dalam pengujian awal yang menentukan di mana eksekusi dimulai dalam isi pernyataan. switch pernyataan dapat di-nest. Variabel statis apa pun diinisialisasi sebelum dieksekusi ke dalam pernyataan switch apa pun.

Catatan

Deklarasi dapat muncul di judul pernyataan majemuk yang membentuk isi switch, tetapi inisialisasi yang termasuk dalam deklarasi tidak dilakukan. Pernyataan switch mentransfer kontrol langsung ke pernyataan yang dapat dieksekusi dalam isi, melewati garis yang berisi inisialisasi.

Contoh berikut mengilustrasikan pernyataan switch:

switch( c )
{
    case 'A':
        capital_a++;
    case 'a':
        letter_a++;
    default :
        total++;
}

Ketiga pernyataan isi switch dalam contoh ini dijalankan jika c sama dengan 'A', karena tidak ada pernyataan break yang muncul sebelum case berikut ini. Kontrol eksekusi ditransfer ke pernyataan pertama (capital_a++;) dan berlanjut secara berurutan melalui seluruh isi. Jika c sama dengan 'a', letter_a dan total dinaikkan. Hanya total dinaikkan jika c tidak sama dengan 'A' atau 'a'.

switch( i )
{
    case -1:
        n++;
        break;
    case 0 :
        z++;
        break;
    case 1 :
        p++;
        break;
}

Dalam contoh ini, pernyataan break mengikuti setiap pernyataan isi switch. Pernyataan break memaksa keluar dari isi pernyataan setelah satu pernyataan dieksekusi. Jika i sama dengan -1, hanya n yang dinaikkan. break yang mengikuti pernyataan n++; menyebabkan kontrol eksekusi keluar dari badan pernyataan, melewati pernyataan yang tersisa. Demikian pula, jika i sama dengan 0, hanya z yang dinaikkan; jika i sama dengan 1, hanya p dinaikkan. Pernyataan break terakhir tidak sepenuhnya diperlukan, karena kontrol keluar dari isi di akhir pernyataan majemuk. Ini termasuk untuk konsistensi.

Satu pernyataan dapat membawa beberapa label case, seperti yang ditunjukkan contoh berikut:

switch( c )
{
    case 'a' :
    case 'b' :
    case 'c' :
    case 'd' :
    case 'e' :
    case 'f' :  convert_hex(c);
}

Dalam contoh ini, jika constant-expression sama dengan huruf apa pun antara 'a' dan 'f', convert_hex fungsi dipanggil.

Khusus Microsoft

Microsoft C tidak membatasi jumlah nilai case dalam pernyataan switch. Jumlah hanya dibatasi oleh memori yang tersedia. ANSI C mengharuskan setidaknya 257 label case diizinkan dalam sebuah pernyataan switch.

default untuk Microsoft C adalah ekstensi Microsoft yang diaktifkan. Gunakan opsi pengompilasi /Za untuk menonaktifkan ekstensi ini.

Lihat juga

switch Pernyataan (C++)