


Mengapakah goto digunakan secara meluas dalam kernel Linux, tetapi banyak buku tidak menyokong penggunaannya?
Terdapat banyak kontroversi tentang pernyataan goto dalam bahasa C, dan banyak buku mengesyorkan "gunakannya dengan berhati-hati atau elakkan menggunakannya." Walau bagaimanapun, dalam amalan Linus, bapa Linux, beliau secara meluas menggunakan pernyataan goto dalam Linux, yang juga memberi inspirasi kepada kami untuk menggunakan ciri ini secara munasabah.
Disebabkan kontroversi itu, kita perlu belajar menggunakan kenyataan goto. Mari lihat beberapa sintaks asas dan contoh pernyataan goto:
1. Sintaks asas goto
Pernyataan goto terdiri daripada dua bahagian: kata kunci goto dan nama tag. Peraturan penamaan untuk label adalah sama dengan peraturan untuk pembolehubah. Contoh:
goto label;
Untuk penyataan ini berfungsi dengan betul, fungsi itu juga mesti mengandungi label berlabel pernyataan lain, yang bermula dengan nama label diikuti dengan titik bertindih, seperti:
label:printf("goto here.n");
2. Contoh goto
Leret ke kiri dan kanan untuk melihat semua kod>>>>
/* 编译环境:mingw32 gcc6.3.0 */ #include #include /* goto测试 */ void TestGoto(void) { int i; while (1) { for (i = 0; i if (i > 6) { goto label; } printf("%s : i = %d\n", __FUNCTION__, i); } } label: printf("test goto end!"); } int main(void) { TestGoto(); }
Hasil lari:

Daripada hasil yang sedang dijalankan, kita jelas dapat mengetahui penggunaan goto, yang boleh melompat keluar daripada berbilang gelung Apabila pernyataan goto ditemui semasa pelaksanaan program, ia boleh melompat ke label untuk meneruskan pelaksanaan.
Satu perkara yang perlu diberi perhatian ialah: pernyataan goto dan label lompatannya mestilah dalam fungsi yang sama.
3 Apakah perbezaan antara goto, break dan continue?
Ia juga merupakan pernyataan lompat. Apakah perbezaan antara pernyataan goto dan penyataan break dan continue?
Sebenarnya, break dan continue adalah bentuk khas goto. Kelebihan menggunakan break dan continue ialah nama mereka sudah menunjukkan penggunaannya.
Mari kita lihat penggunaan rehat dan teruskan melalui contoh kod:
1. Fungsi ujian rehat
Gunakan program ujian di atas untuk membina fungsi void TestBreak(void);
untuk menguji pernyataan rehat, seperti:
Leret ke kiri atau kanan untuk melihat semua kod>>>>
/* break测试 */ void TestBreak(void) { int i; while (1) { for (i = 0; i if (i > 6) { break; /* 第一个break:跳出for循环 */ } printf("%s : i = %d\n", __FUNCTION__, i); } printf("Now i = %d\n", i); break; /* 第一个break:跳出while循环 */ } printf("test break end!"); }
Hasil lari:

Daripada keputusan larian, kita boleh tahu dengan jelas bahawa rehat boleh keluar dari gelung semasa.
Dalam contoh ini, pernyataan putus pertama keluar dari gelung arus untuk, dan pernyataan putus kedua keluar dari gelung semasa semasa. Ia boleh dilihat bahawa rehat boleh keluar dari gelung.
Jadi, mengikut ciri-ciri break dan goto, jika anda ingin melompat keluar dari banyak peringkat gelung, ia akan menjadi lebih mudah untuk menggunakan goto.
2. teruskan fungsi test
Begitu juga, bina fungsi void TestContinue(void);
untuk menguji pernyataan continue, seperti:
Leret ke kiri dan kanan untuk melihat semua kod>>>>
/* continue测试 */ void TestContinue(void) { int i; for (i = 0; i if (i > 6) { printf("i = %d, continue next loop\n", i); continue; /* continue:结束本次循环(而不是终止这一层循环)继续进入下一次循环 */ } printf("%s : i = %d\n", __FUNCTION__, i); } printf("test break end!"); }
Hasil lari:

Kita boleh tahu dengan jelas daripada hasil larian yang berterusan boleh menamatkan gelung ini (bukan keseluruhan gelung) dan masukkan gelung seterusnya (i mewakili bilangan gelung).
四、支持与反对goto的理由是什么?
1、不提倡使用goto
不提倡使用goto的占比应该比较多,不提倡的原因主要是:很容易把逻辑弄乱且难以理解。
2、使用goto的理由
这一部分人认为goto可以用在以下两种情况比较方便:
(1)跳出多层循环。
这个例子就类似于我们上面的goto测试程序。
(2)异常处理。
一个函数的执行过程可能会产生很多种情况异常情况。下面有几种处理方式,以代码为例:
方法一:做出判断后,如果条件出错,直接return。
*左右滑动查看全部代码>>>*
int mystrlen(char *str) { int count = 0; if (str == NULL) { return-1; } if (*str == 0) { return0; } while(*str != 0 ) { count++; str++; } return count; }
方法二:先设置一个变量,对变量赋值,只有一个return。
*左右滑动查看全部代码>>>*
int mystrlen(char *str) { int ret; if (str == NULL) { ret = -1; } elseif (*str == 0) { ret = 0; } else { ret = 0; while(*str != 0 ) { ret++; str++; } } return ret; }
方法三:使用goto语句。
*左右滑动查看全部代码>>>*
int mystrlen(char *str) { int ret; if (str == NULL) { ret = -1; goto _RET; } if (*str == 0) { ret = 0; goto _RET; } while(*str !=0 ) { ret++; str++; } _RET: return ret; }
其中,方法三就是很多人都提倡的方式。统一用goto err跳转是最方便且效率最高的,从反汇编语句条数可以看出指令用的最少,消耗的寄存器也最少,效率无疑是最高的。
并且,使用goto可以使程序变得更加可扩展。当程序需要在错误处理时释放资源时,统一到goto处理最方便。这也是为什么很多大型项目,开源项目,包括Linux,都会大量的出现goto来处理错误!
Atas ialah kandungan terperinci Mengapakah goto digunakan secara meluas dalam kernel Linux, tetapi banyak buku tidak menyokong penggunaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

DeepSeek adalah alat carian dan analisis pintar yang kuat yang menyediakan dua kaedah akses: versi web dan laman web rasmi. Versi web adalah mudah dan cekap, dan boleh digunakan tanpa pemasangan; Sama ada individu atau pengguna korporat, mereka dapat dengan mudah mendapatkan dan menganalisis data besar-besaran melalui DeepSeek untuk meningkatkan kecekapan kerja, membantu membuat keputusan dan menggalakkan inovasi.

Terdapat banyak cara untuk memasang DeepSeek, termasuk: Menyusun dari Sumber (untuk pemaju berpengalaman) menggunakan pakej yang dikompilasi (untuk pengguna Windows) menggunakan bekas docker (untuk yang paling mudah, tidak perlu bimbang tentang keserasian) Dokumen rasmi dengan berhati -hati dan menyediakannya sepenuhnya untuk mengelakkan masalah yang tidak perlu.

Bitget adalah pertukaran cryptocurrency yang menyediakan pelbagai perkhidmatan perdagangan termasuk perdagangan tempat, perdagangan kontrak dan derivatif. Ditubuhkan pada tahun 2018, pertukaran itu beribu pejabat di Singapura dan komited untuk menyediakan pengguna dengan platform perdagangan yang selamat dan boleh dipercayai. Bitget menawarkan pelbagai pasangan perdagangan, termasuk BTC/USDT, ETH/USDT dan XRP/USDT. Di samping itu, pertukaran mempunyai reputasi untuk keselamatan dan kecairan dan menawarkan pelbagai ciri seperti jenis pesanan premium, perdagangan leverage dan sokongan pelanggan 24/7.

Ouyi Okx, pertukaran aset digital terkemuka di dunia, kini telah melancarkan pakej pemasangan rasmi untuk menyediakan pengalaman perdagangan yang selamat dan mudah. Pakej pemasangan OKX OUYI tidak perlu diakses melalui penyemak imbas. Proses pemasangan adalah mudah dan mudah difahami.

Gate.io adalah pertukaran cryptocurrency yang popular yang boleh digunakan pengguna dengan memuat turun pakej pemasangannya dan memasangnya pada peranti mereka. Langkah -langkah untuk mendapatkan pakej pemasangan adalah seperti berikut: Lawati laman web rasmi Gate.io, klik "Muat turun", pilih sistem operasi yang sepadan (Windows, Mac atau Linux), dan muat turun pakej pemasangan ke komputer anda. Adalah disyorkan untuk mematikan perisian antivirus atau firewall sementara semasa pemasangan untuk memastikan pemasangan yang lancar. Selepas selesai, pengguna perlu membuat akaun Gate.io untuk mula menggunakannya.

Ouyi, juga dikenali sebagai Okx, adalah platform perdagangan cryptocurrency terkemuka di dunia. Artikel ini menyediakan portal muat turun untuk pakej pemasangan rasmi Ouyi, yang memudahkan pengguna memasang klien OUYI pada peranti yang berbeza. Pakej pemasangan ini menyokong sistem Windows, Mac, Android dan iOS. Selepas pemasangan selesai, pengguna boleh mendaftar atau log masuk ke akaun OUYI, mula membuat kriptografi perdagangan dan nikmati perkhidmatan lain yang disediakan oleh platform.

Gate.io adalah platform perdagangan cryptocurrency yang sangat terkenal yang dikenali sebagai pemilihan token yang luas, yuran transaksi yang rendah dan antara muka yang mesra pengguna. Dengan ciri -ciri keselamatan lanjutan dan perkhidmatan pelanggan yang cemerlang, Gate.io menyediakan peniaga dengan persekitaran perdagangan cryptocurrency yang boleh dipercayai dan mudah. Jika anda ingin menyertai Gate.io, sila klik pautan yang disediakan untuk memuat turun pakej pemasangan pendaftaran rasmi untuk memulakan perjalanan perdagangan cryptocurrency anda.

Tutorial ini membimbing anda melalui memasang dan mengkonfigurasi nginx dan phpmyadmin pada sistem Ubuntu, berpotensi bersama pelayan Apache yang sedia ada. Kami akan meliputi penubuhan nginx, menyelesaikan potensi konflik pelabuhan dengan Apache, memasang MariaDB (
