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

Mengapa Ralat \'Lompat ke Label Kes\' Berlaku dalam Pernyataan Suis?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 04:19:29617semak imbas

Why Does

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!

Kenyataan:
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