码迷,mamicode.com
首页 > 其他好文 > 详细

类似 nginx 编译时生成函数链表

时间:2015-06-23 20:09:00      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:c++   nginx   函数指针   编程   


以下代码可能需要一定的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

如果你已经编程并执行成功,请继续往下看.

top_pt 为全局变量

next_pt为局部全局变量

如果你想知道

top_pt 在每次代码执行时都会变化,不断地指向新的链表头部,通过init_*函数的不断执行,一条链表就产生了。看起来就像是用全局变量组成了一条单项链表。

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

类似 nginx 编译时生成函数链表

标签:c++   nginx   函数指针   编程   

原文地址:http://blog.csdn.net/tangliguantou/article/details/46608593

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!