


Warum wird goto im Linux-Kernel häufig verwendet, obwohl viele Bücher seine Verwendung nicht befürworten?
Es gibt viele Kontroversen über die goto-Anweisung in der C-Sprache, und in vielen Büchern wird empfohlen, sie mit Vorsicht zu verwenden oder sogar zu vermeiden. In der Praxis von Linus, dem Vater von Linux, verwendete er jedoch häufig die goto-Anweisung in Linux, was uns auch dazu inspirierte, diese Funktion sinnvoll zu nutzen.
Aufgrund der Kontroverse ist es notwendig, dass wir lernen, goto-Anweisungen zu verwenden. Schauen wir uns einige grundlegende Syntax und Beispiele für goto-Anweisungen an:
1. Grundlegende Syntax von goto
Die goto-Anweisung besteht aus zwei Teilen: dem Schlüsselwort goto und dem Tag-Namen. Die Benennungsregeln für Beschriftungen sind dieselben wie für Variablen. Beispiel:
goto label;
Damit diese Anweisung ordnungsgemäß funktioniert, muss die Funktion auch eine weitere Anweisung mit der Bezeichnung „label“ enthalten, die mit dem Labelnamen gefolgt von einem Doppelpunkt beginnt, wie zum Beispiel:
label:printf(“goto here.n”);
2. Beispiel für goto
Wischen Sie nach links oder rechts, um alle Codes anzuzeigen>>>>
/* 编译环境: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(); }
Laufergebnis:

Aus den laufenden Ergebnissen können wir offensichtlich die Verwendung von goto erkennen, die aus mehreren Schleifen springen kann. Wenn während der Ausführung des Programms auf die goto-Anweisung gestoßen wird, kann sie zum Label springen, um die Ausführung fortzusetzen.
Bemerkenswert ist: Die goto-Anweisung und ihre Sprungmarke müssen sich innerhalb derselben Funktion befinden.
3. Was ist der Unterschied zwischen Gehe zu, Pause und Fortfahren?
Es ist auch eine Sprunganweisung. Was ist der Unterschied zwischen der goto-Anweisung und den break- und continue-Anweisungen?
Tatsächlich sind Break und Continue Sonderformen von Goto. Der Vorteil der Verwendung von break und continue besteht darin, dass ihre Namen bereits auf ihre Verwendung hinweisen.
Werfen wir einen Blick auf die Verwendung von break und fahren wir mit Codebeispielen fort:
1. Bruchtestfunktion
Verwenden Sie das obige Testprogramm, um eine Funktion void TestBreak(void);
zum Testen der Break-Anweisung zu erstellen, wie zum Beispiel:
Wischen Sie nach links oder rechts, um alle Codes anzuzeigen>>>>
/* 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!"); }
Laufergebnis:

Aus den laufenden Ergebnissen können wir offensichtlich erkennen, dass break die aktuelle Schleife verlassen kann.
In diesem Beispiel verlässt die erste break-Anweisung die aktuelle for-Schleife und die zweite break-Anweisung verlässt die aktuelle while-Schleife. Es ist ersichtlich, dass ein Break eine Schleife verlassen kann.
Wenn Sie also aus vielen Schleifenebenen springen möchten, ist es gemäß den Eigenschaften von break und goto bequemer, goto zu verwenden.
2. Testfunktion fortsetzen
Erstellen Sie auf ähnliche Weise eine Funktion void TestContinue(void);
, um die continue-Anweisung zu testen, wie zum Beispiel:
Wischen Sie nach links und rechts, um alle Codes anzuzeigen>>>>
/* 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!"); }
Laufergebnis:

Aus den laufenden Ergebnissen können wir natürlich erkennen, dass continue diese Schleife (nicht die gesamte Schleife) beenden und in die nächste Schleife eintreten kann (i steht für die Anzahl der Schleifen).
四、支持与反对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来处理错误!
Das obige ist der detaillierte Inhalt vonWarum wird goto im Linux-Kernel häufig verwendet, obwohl viele Bücher seine Verwendung nicht befürworten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Verwenden Sie Python im Linux -Terminal ...

Multithreading in der Sprache kann die Programmeffizienz erheblich verbessern. Es gibt vier Hauptmethoden, um Multithreading in C -Sprache zu implementieren: Erstellen Sie unabhängige Prozesse: Erstellen Sie mehrere unabhängig laufende Prozesse. Jeder Prozess hat seinen eigenen Speicherplatz. Pseudo-MultitHhreading: Erstellen Sie mehrere Ausführungsströme in einem Prozess, der denselben Speicherplatz freigibt und abwechselnd ausführt. Multi-Thread-Bibliothek: Verwenden Sie Multi-Thread-Bibliotheken wie PThreads, um Threads zu erstellen und zu verwalten, wodurch reichhaltige Funktionen der Thread-Betriebsfunktionen bereitgestellt werden. Coroutine: Eine leichte Multi-Thread-Implementierung, die Aufgaben in kleine Unteraufgaben unterteilt und sie wiederum ausführt.

Um eine Web.xml -Datei zu öffnen, können Sie die folgenden Methoden verwenden: Verwenden Sie einen Texteditor (z.

In Bezug auf das Problem der Entfernung des Python -Dolmetschers, das mit Linux -Systemen ausgestattet ist, werden viele Linux -Verteilungen den Python -Dolmetscher bei der Installation vorinstallieren, und verwendet den Paketmanager nicht ...

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Debianlinux ist bekannt für seine Stabilität und Sicherheit und wird in Server-, Entwicklungs- und Desktop -Umgebungen häufig verwendet. Während es derzeit einen Mangel an offiziellen Anweisungen zur direkten Kompatibilität mit Debian und Hadoop gibt, wird dieser Artikel Sie dazu veranlassen, Hadoop in Ihrem Debian -System bereitzustellen. Debian -Systemanforderungen: Bevor Sie mit der Hadoop -Konfiguration beginnen, stellen Sie bitte sicher, dass Ihr Debian -System die Mindestanforderungen von Hadoop erfüllt, einschließlich der Installation der erforderlichen Java -Laufzeitumgebung (JRE) und Hadoop -Pakete. Schritte zur Bereitstellung von Hadoop -Bereitstellungen: Download und Unzip Hadoop: Laden Sie die Hadoop -Version von der offiziellen Apachehadoop -Website herunter und lösen Sie sie

"DebianStrings" ist kein Standardbegriff und seine spezifische Bedeutung ist noch unklar. Dieser Artikel kann seine Browserkompatibilität nicht direkt kommentieren. Wenn sich jedoch "DebianStrings" auf eine Webanwendung bezieht, die auf einem Debian -System ausgeführt wird, hängt seine Browserkompatibilität von der technischen Architektur der Anwendung selbst ab. Die meisten modernen Webanwendungen sind für die Kompatibilität des Cross-Browsers verpflichtet. Dies beruht auf den folgenden Webstandards und der Verwendung gut kompatibler Front-End-Technologien (wie HTML, CSS, JavaScript) und Back-End-Technologien (wie PHP, Python, Node.js usw.). Um sicherzustellen, dass die Anwendung mit mehreren Browsern kompatibel ist, müssen Entwickler häufig Kreuzbrowser-Tests durchführen und die Reaktionsfähigkeit verwenden

Muss ich einen Oracle -Client installieren, wenn ich mit GO eine Verbindung zu einer Oracle -Datenbank herstellen kann? Bei der Entwicklung in Go ist die Verbindung zu Oracle -Datenbanken eine übliche Anforderung ...
