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

Linda Hamilton
Lepaskan: 2024-10-29 04:19:29
asal
565 orang telah melayarinya

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

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!