需要有一些函数指针的知识
深度剖析函数指针点击这里
common.h
#pragma once typedef int (*pt)(void); void init_2();
2.cpp
#include1.cpp#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(); }
#include编译命令#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
如果你已经编程并执行成功,请继续往下看.
top_pt 为全局变量
next_pt为局部全局变量
如果你想知道
top_pt 在每次代码执行时都会变化,不断地指向新的链表头部,通过init_*函数的不断执行,一条链表就产生了。看起来就像是用全局变量组成了一条单项链表。
好吧,又是奇淫技巧,如是而已!
以上就介绍了类似 nginx 编译时生成函数链表,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!