首頁  >  文章  >  後端開發  >  類似 nginx 編譯時產生函數鍊錶

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

WBOY
WBOY原創
2016-08-08 09:22:181177瀏覽

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

需要一些函數指標的知識

深度剖析函數指標點這裡

common.h

#pragma once
typedef int (*pt)(void);
void init_2();

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();
}
 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;
}
編譯指令 

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

執行

./a.out

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

next_pt為局部全域變數

如果你想知道

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

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

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

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