Rumah > pembangunan bahagian belakang > C++ > Mengapa Pernyataan Suis Saya Melemparkan Ralat \'Lompat ke Label Kes\'?

Mengapa Pernyataan Suis Saya Melemparkan Ralat \'Lompat ke Label Kes\'?

Patricia Arquette
Lepaskan: 2024-10-29 07:43:02
asal
959 orang telah melayarinya

Why Does My Switch Statement Throw a

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan