Ralat Lompat Kes Pernyataan Suis
Apabila bekerja dengan pernyataan suis, ralat pengkompil berikut mungkin berlaku:
Ralat: Lompat ke label kes.
Ralat ini berlaku apabila cuba melompat terus ke label kes tanpa mengendalikan skop pembolehubah yang diisytiharkan dengan betul.
Pertimbangkan kod berikut coretan:
<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>
Dalam contoh ini, ralat berlaku dalam kes kedua kerana pembolehubah yang saya isytiharkan dalam kes pertama kelihatan dalam kes berikutnya. Walau bagaimanapun, memandangkan tiada blok eksplisit yang mengelilingi kes pertama, saya tidak akan dimulakan dalam kes kedua.
Untuk menyelesaikan isu ini, kes pertama mesti dibungkus dalam blok eksplisit:
<code class="cpp">switch(choice) { case 1: { int i = 0; break; } case 2: break; }</code>
Dengan mengisytiharkan i dalam blok, skopnya terhad kepada kes pertama, menghalang penggunaannya secara tidak sengaja dalam kes kedua.
Ini penting kerana pembolehubah yang diisytiharkan dalam satu kes masih boleh diakses dalam kes berikutnya , tetapi permulaannya tidak akan berlaku melainkan kes itu memulakannya secara eksplisit. Membungkus kes dalam blok eksplisit memastikan skop pembolehubah dan permulaan yang betul, menghalang ralat "lompat ke label kes".
Penjelasan Lanjut:
Tukar pernyataan menggunakan jadual lompat untuk cepat tentukan kes mana yang hendak dilaksanakan. Apabila kes ditemui, kawalan melompat ke sasaran lompatan yang sepadan, yang mengandungi kod untuk kes itu. Walau bagaimanapun, jika kes itu tidak mengisytiharkan pembolehubahnya secara eksplisit dalam satu blok, pembolehubah daripada kes sebelumnya mungkin kekal boleh diakses, berpotensi membawa kepada gelagat yang tidak dijangka jika ia tidak dimulakan dengan betul.
Atas ialah kandungan terperinci Mengapa Pernyataan Suis Saya Melemparkan Ralat \'Lompat ke Label Kes\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!