Rumah > Artikel > pembangunan bahagian belakang > Mengapa Ralat \"Lompat ke Label Kes\" Berlaku dalam Pernyataan Suis?
Lompat ke Ralat Label Kes dalam Pernyataan Suis
Apabila menghadapi ralat kompilasi "Lompat ke label kes," seseorang mesti meneliti pernyataan suis struktur. Ralat ini timbul apabila terdapat percubaan untuk mengisytiharkan pembolehubah dalam satu kes yang berlanjutan ke dalam kes berikutnya tanpa menggunakan pembatas blok yang jelas, dilambangkan dengan pendakap kerinting ({ }).
Sebagai contoh, pertimbangkan kod berikut:
<code class="cpp">#include <iostream> int main() { int choice; std::cin >> choice; switch(choice) { case 1: int i=0; break; case 2: // error here // Code relying on the existence of i } }</code>
Dalam contoh ini, isu ini berpunca daripada pengisytiharan i dalam kes 1. Walaupun saya akan kelihatan dalam kes 2, ia tidak akan dimulakan. Ini kerana kod permulaan adalah khusus untuk setiap kes. Akibatnya, jika pilihan ialah 2, penggunaan i dalam kod berikutnya boleh membawa kepada hasil yang tidak dijangka.
Untuk membetulkan isu ini, gunakan blok yang jelas untuk setiap kes:
<code class="cpp">switch(choice) { case 1: { int i=0; break; } case 2: { // Use of i only within this block } }</code>
Sebagai alternatif, seseorang boleh menggunakan pernyataan goto, sama dengan pernyataan suis:
<code class="cpp">int main() { if(rand() % 2) // Toss a coin goto end; int i = 42; end: // Similar scope and initialization issues as with switch, but with goto std::cout << i; }</code>
Pada asasnya, blok eksplisit atau penggunaan goto yang teliti memastikan bahawa pengisytiharan pembolehubah dan permulaan disetempatkan kepada kes yang dimaksudkan, mencegah tingkah laku yang salah.
Atas ialah kandungan terperinci Mengapa Ralat \"Lompat ke Label Kes\" Berlaku dalam Pernyataan Suis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!