首頁 後端開發 php教程 類似 nginx 編譯時產生函數鍊錶

類似 nginx 編譯時產生函數鍊錶

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

以下程式碼可能需要一定的c/c++基礎。

需要一些函數指標的知識

深度剖析函數指標點這裡

common.h

1

2

3

#pragma once

typedef int (*pt)(void);

void init_2();

登入後複製

2.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#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();

}

登入後複製
 1.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#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;

}

登入後複製
編譯指令 

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

執行

./a.out

filter_2
filter_1
如果你已經編程並執行成功,請繼續看.

next_pt為局部全域變數

如果你想知道

top_pt 在每次程式碼執行時都會變化,不斷地指向新的鍊錶頭部,透過init_*函數的不斷執行,一條鍊錶就產生了。看起來就像是用全域變數組成了一條單項鍊表。

好吧,又是奇淫技巧,如是而已!

以上就介紹了類似 nginx 編譯時產生函數鍊錶,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
解決「[Vue warn]: Failed to resolve filter」錯誤的方法 解決「[Vue warn]: Failed to resolve filter」錯誤的方法 Aug 19, 2023 pm 03:33 PM

解決「[Vuewarn]:Failedtoresolvefilter」錯誤的方法在使用Vue進行開發的過程中,我們有時會遇到一個錯誤提示:「[Vuewarn]:Failedtoresolvefilter」。這個錯誤提示通常出現在我們在模板中使用了一個未定義的過濾器的情況下。本文將介紹如何解決這個錯誤並給出相應的程式碼範例。當我們在Vue的

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

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

怎麼在SpringBoot2中整合Filter 怎麼在SpringBoot2中整合Filter May 16, 2023 pm 02:46 PM

先定義一個統一存取URL攔截的Filter。程式碼如下:publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,

Springboot中filter的原理與註冊方法是什麼 Springboot中filter的原理與註冊方法是什麼 May 11, 2023 pm 08:28 PM

1.filter先看下web伺服器的filter所處的位置。 filter是一個前後連接的鏈,前面處理完成之後傳遞給下一個filter處理。 1.1filter的介面定義publicinterfaceFilter{//初始化方法,整個生命週期只執行一次。 //在init方法成功(失敗如拋異常等)執行完前,無法提供過濾服務。 //參數FilterConfig用於取得初始化參數publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

CSS 模糊屬性詳解:filter 與 backdrop-filter CSS 模糊屬性詳解:filter 與 backdrop-filter Oct 20, 2023 pm 04:48 PM

CSS模糊屬性詳解:filter和backdrop-filter導語:在設計網頁時,我們常常需要一些特效來增加頁面的視覺吸引力。而模糊效果是其中一種常見的特效之一。 CSS提供了兩種模糊屬性:filter和backdrop-filter,它們分別用於對元素內容以及背景內容進行模糊處理。本文將詳細介紹這兩個屬性,並提供一些具體的程式碼範例。一、filt

CSS 視覺屬性解析:box-shadow,text-shadow 和 filter CSS 視覺屬性解析:box-shadow,text-shadow 和 filter Oct 20, 2023 pm 12:51 PM

CSS視覺屬性解析:box-shadow,text-shadow和filter引言:在網頁設計和開發中,使用CSS可以為元素添加各種視覺效果。本文將重點放在CSS中的box-shadow,text-shadow和filter這三個重要屬性,包括其使用方法和效果展示。下面我們分別詳細解析這三個屬性。一、box-shadow(盒子陰影)box-shado

Filter在java中如何過濾 Filter在java中如何過濾 Apr 18, 2023 pm 11:04 PM

說明1、如果Lambda參數產生true值,則filter(能夠產生boolean結果的Lambda)將產生元素;2、產生false時,就不再使用此元素。實例建立一個List集合:ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

Java 8中的Optional類別:如何使用filter()方法過濾可能為空的值 Java 8中的Optional類別:如何使用filter()方法過濾可能為空的值 Aug 01, 2023 pm 05:27 PM

Java8中的Optional類別:如何使用filter()方法過濾可能為空的值在Java8中,Optional類別是一個非常有用的工具,它允許我們更好地處理可能為空的值,避免了NullPointerException的發生。 Optional類別提供了許多方法來操作潛在的空值,其中一個重要的方法是filter()。 filter()方法的作用是,如果Option

See all articles