Rumah >pembangunan bahagian belakang >C++ >Bilakah Penggunaan `goto` dalam C atau C Boleh Diterima?

Bilakah Penggunaan `goto` dalam C atau C Boleh Diterima?

DDD
DDDasal
2024-12-15 03:46:14748semak imbas

When is Using `goto` in C or C   Acceptable?

Penggunaan Goto yang Baik dalam C atau C

Walaupun pandangan yang sering dipegang bahawa goto berbahaya secara universal, terdapat keadaan tertentu di mana ia penggunaan boleh memberikan faedah yang jelas.

Pembersihan Blok

Satu kes sedemikian adalah dalam penciptaan blok pembersihan, corak yang biasa digunakan dalam C untuk memastikan pengagihan sumber yang betul sekiranya berlaku ralat. Menggunakan goto, kami boleh melaksanakan blok pembersihan seperti berikut:

void foo()
{
    if (!doA())
        goto exit;
    if (!doB())
        goto cleanupA;
    if (!doC())
        goto cleanupB;

    /* everything has succeeded */
    return;

cleanupB:
    undoB();
cleanupA:
    undoA();
exit:
    return;
}

Kod ini membolehkan pengendalian keadaan ralat yang jelas dan cekap. Sekiranya berlaku ralat dalam doB() atau doC(), fungsi pembersihan yang sesuai dipanggil dan pelaksanaan diteruskan ke label keluar untuk kembali daripada fungsi.

Cawangan Tanpa Syarat Khusus

Goto juga boleh memberi manfaat apabila melakukan percabangan tanpa syarat tertentu. Contohnya, kod berikut mensimulasikan gelung tak terhingga menggunakan goto:

infinite_loop:

    // code goes here

goto infinite_loop;

Pendekatan ini lebih khusus dan mendokumentasikan diri daripada menggunakan gelung sementara dengan keadaan merosot, kerana ia jelas menunjukkan niat untuk meneruskan gelung .

Awas

Adalah penting untuk ambil perhatian bahawa goto tidak boleh digunakan sembarangan. Ia boleh membawa kepada kod spageti dengan mudah jika tidak digunakan dengan bijak. Walau bagaimanapun, apabila digunakan dengan sewajarnya, ia boleh menyediakan alat yang berharga untuk mencipta kod yang cekap dan boleh dibaca.

Atas ialah kandungan terperinci Bilakah Penggunaan `goto` dalam C atau C Boleh Diterima?. 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