回调函数的应用误区2(与原理相悖的回调函数)

研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法。我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽。

下面的代码可以在Vs2008下编译并运行:

个人观点:

以下代码虽说是按照C/S,调用者/被调者的思路去设计回调函数的,但实际上整个代码里面缺少最关键一环:没有出现被调函数(即用回调函数做参数的函数),所以不符合回调函数的基本原理。

就把它当成c/s模式下的函数指针调用吧,或者不伦不类的函数指针调用,没有理解到回调函数的真正含义,这个误区你犯过了没?。

################dll.h################

#pragma once
typedef void (* CALLBACK)(int var);
extern CALLBACK g_pfunc;
extern void dll_register_callback();

################dll.cpp################

#include <stdio.h>
#include "dll.h"

CALLBACK g_pfunc = NULL;

//回调函数定义
void CallBackFunc(int var)
{
    printf("[CallBackFunc]: data=%d ", var);
}

//回调函数注册
void dll_register_callback()
{
    g_pfunc = CallBackFunc;
}
################app.cpp################

#include <stdio.h>
#include "dll.h"

int main()
{    
    //register CALLBACK
    dll_register_callback();
    //run CALLBACK
    (*g_pfunc)(20);
    return 0;
}

原文地址:https://www.cnblogs.com/jacklikedogs/p/3748002.html