Heim Backend-Entwicklung PHP-Tutorial Ähnlich wie bei Nginx wird beim Kompilieren eine funktionsverknüpfte Liste generiert

Ähnlich wie bei Nginx wird beim Kompilieren eine funktionsverknüpfte Liste generiert

Aug 08, 2016 am 09:22 AM
filter next quot

Der folgende Code erfordert möglicherweise eine bestimmte C/C++-Grundlage.

Erfordert einige Kenntnisse über Funktionszeiger

Klicken Sie hier für eine ausführliche Analyse von Funktionszeigern

common.h

#pragma once
typedef int (*pt)(void);
void init_2();
Nach dem Login kopieren

2 .cpp
#include <iostream>
#include "common.h"
using namespace std;
static pt next_pt;
extern pt top_pt;
int filter_2()
{
    cout<<"filter_2"<<endl;
    if(next_pt)
        next_pt();
}
static void filter_2_init()
{
    next_pt = top_pt;
    top_pt = filter_2; 
}
void init_2()
{
    filter_2_init();
}
Nach dem Login kopieren
1.cpp
#include <iostream>
#include "common.h"
using namespace std;
static pt next_pt;
pt top_pt;

static int filter_1()
{
    cout<<"filter_1"<<endl;    
    if(next_pt)
        next_pt();
}
static void filter_init()
{
    next_pt = top_pt;
    top_pt = filter_1;
}
void init_1()
{
    filter_init();
}
int main()
{
    init_1();
    init_2();
    top_pt();
    return 0;
}
Nach dem Login kopieren
Kompilierungsbefehl

g++ 1.cpp 2.cpp -g -O0

execute

./a.out

filter_2
filter_1
falls Sie programmiert haben Und die Ausführung ist erfolgreich, lesen Sie bitte weiter.

top_pt ist eine globale Variable

next_pt ist eine lokale globale Variable

Wenn Sie wissen möchten, was

top_pt befindet sich in jedem. Es ändert sich jedes Mal, wenn der Code ausgeführt wird, und zeigt ständig auf den Kopf der neuen verknüpften Liste. Durch die kontinuierliche Ausführung der Funktion init_* wird eine verknüpfte Liste generiert. Es sieht aus wie eine einfach verknüpfte Liste, die aus globalen Variablen besteht.

Okay, es ist wieder eine seltsame Technik, das ist alles!

Das Obige hat die von Nginx beim Kompilieren generierte verknüpfte Funktionsliste vorgestellt, einschließlich der relevanten Aspekte. Ich hoffe, dass sie für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. Aug 19, 2023 pm 03:33 PM

Methoden zur Behebung des Fehlers „[Vuewarn]:Failedtoresolvefilter“ Während des Entwicklungsprozesses mit Vue stoßen wir manchmal auf eine Fehlermeldung: „[Vuewarn]:Failedtoresolvefilter“. Diese Fehlermeldung tritt normalerweise auf, wenn wir in der Vorlage einen undefinierten Filter verwenden. In diesem Artikel wird erläutert, wie dieser Fehler behoben werden kann, und es werden entsprechende Codebeispiele aufgeführt. Wenn wir in Vue sind

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Was ist das Prinzip und die Registrierungsmethode des Filters in Springboot? Was ist das Prinzip und die Registrierungsmethode des Filters in Springboot? May 11, 2023 pm 08:28 PM

1. Filter Sehen Sie sich zunächst den Standort des Filters auf dem Webserver an. Filter ist eine Kette, die vorher und nachher verbunden ist. Nachdem die vorherige Verarbeitung abgeschlossen ist, wird sie zur Verarbeitung an den nächsten Filter übergeben. 1.1Filterschnittstellendefinition publicinterfaceFilter{//Initialisierungsmethode, die im gesamten Lebenszyklus nur einmal ausgeführt wird. //Filterdienste können erst bereitgestellt werden, wenn die Init-Methode erfolgreich ausgeführt wurde (Fehler wie das Auslösen einer Ausnahme usw.). //Der Parameter FilterConfig wird verwendet, um den Initialisierungsparameter abzurufen publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

So integrieren Sie Filter in SpringBoot2 So integrieren Sie Filter in SpringBoot2 May 16, 2023 pm 02:46 PM

Definieren Sie zunächst einen Filter für das Abfangen von Unified Access-URLs. Der Code lautet wie folgt: publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H

So filtern Sie in Java So filtern Sie in Java Apr 18, 2023 pm 11:04 PM

Hinweis 1. Wenn der Lambda-Parameter einen wahren Wert generiert, generiert der Filter (Lambda, der ein boolesches Ergebnis generieren kann) ein Element 2. Wenn ein falscher Wert generiert wird, wird dieses Element nicht mehr verwendet. Beispiel zum Erstellen einer Listensammlung: ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

Detaillierte Erläuterung der CSS-Unschärfeeigenschaften: Filter und Hintergrundfilter Detaillierte Erläuterung der CSS-Unschärfeeigenschaften: Filter und Hintergrundfilter Oct 20, 2023 pm 04:48 PM

Detaillierte Erläuterung der CSS-Fuzzy-Eigenschaften: Filter und Hintergrundfilter Einführung: Beim Entwerfen von Webseiten benötigen wir häufig einige Spezialeffekte, um die visuelle Attraktivität der Seite zu erhöhen. Der Unschärfeeffekt ist einer der häufigsten Spezialeffekte. CSS bietet zwei Unschärfeattribute: Filter und Hintergrundfilter, die zum Unschärfen von Elementinhalten bzw. Hintergrundinhalten verwendet werden. In diesem Artikel werden diese beiden Eigenschaften ausführlich erläutert und einige konkrete Codebeispiele bereitgestellt. 1. Filter

Analyse visueller CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Analyse visueller CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Oct 20, 2023 pm 12:51 PM

Analyse der visuellen CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Einführung: Im Webdesign und in der Webentwicklung kann CSS verwendet werden, um Elementen verschiedene visuelle Effekte hinzuzufügen. Dieser Artikel konzentriert sich auf die drei wichtigen Eigenschaften von Box-Shadow, Text-Shadow und Filter in CSS, einschließlich ihrer Verwendung und Effektanzeige. Im Folgenden analysieren wir diese drei Eigenschaften im Detail. 1. Box-Shado (Box-Shado) Box-Shado

Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Aug 01, 2023 pm 05:27 PM

Optionale Klasse in Java8: So verwenden Sie die filter()-Methode, um möglicherweise Nullwerte zu filtern. In Java8 ist die optionale Klasse ein sehr nützliches Werkzeug, das es uns ermöglicht, möglicherweise Nullwerte besser zu verarbeiten und das Auftreten von NullPointerException zu vermeiden. Die optionale Klasse bietet viele Methoden zum Bearbeiten potenzieller Nullwerte. Eine der wichtigen Methoden ist filter(). Die Funktion der filter()-Methode ist die if-Option

See all articles