回调函数理解

参考

深入理解:回调函数_极客点儿的博客-CSDN博客_回调函数

回调函数 - doitjust - 博客园

举个例子吧,主函数所在源文件假如叫主模块,主函数所在源文件中调用的其他函数所在的源文件叫子模块。正常调用函数的过程是主模块调用子模块的函数,如果有一种函数在子模块调用主模块的函数,那么这种函数就叫做回头调用,即回调函数。


你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

或者是说,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了+店员给你打电话叫做 触发回调事件,你到店里去取货这个动作叫做 响应回调事件。你拿到货叫做程序执行结果,于此同时显示出调用回调函数(你的电话号码)的作用。
 

代码示例

para_callback.h

#ifndef __PARA_CALLBACK_H
#define __PARA_CALLBACK_H

typedef void(*callback_t)(void *);

void repeat_three_times(callback_t f, void *para);


#endif#pragma once

para_callback.cpp

#include "para_callback.h"

void repeat_three_times(callback_t f, void *para)
{
	f(para);
	f(para);
	f(para);
}

main.cpp


#include <stdio.h>
#include "para_callback.h"
#include<iostream>

//using namespace std;

void say_hello(void *str)
{
	printf("Hello %s\r\n", (const char *)str);
}

void count_numbers(void *num)
{
	int i = 0;
	for (i = 1; i <= (int)num; i++)
	{
		printf("%d ", i);
	}
	putchar('\n');
}


//void * string1 = "Guys";

int main(void)
{
	repeat_three_times(say_hello, "Guys");
	repeat_three_times(count_numbers, (void *)4);
	return 0;
}

运行上面这个程序可能会出现以下错误

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C2664	“void repeat_three_times(callback_t,void *)”: 无法将参数 2 从“const char [5]”转换为“void *”	Project2	d:\file\vs_project\project2\project2\main.cpp	23
严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C2440	“初始化”: 无法从“const char [5]”转换为“void *”	Project2	d:\file\vs_project\project2\project2\main.cpp	24

参考下面这个博客

vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决_皮卡橘橘的博客-CSDN博客

项目属性配置->C/C++ -> 语言 -> 符合模式,从“是/permissive”改为“否”。

2022.07.19

----------------------------------------------------------------------------------------------------------

又看了几篇文章,加深了以下理解,理解回调函数的前提是了解同步和异步

从小白到高手,你需要理解同步与异步(内含10张图)

10张图让你彻底理解回调函数

什么是回调函数?为什么要使用回调函数?如何使用回调函数?_llzhang_fly的博客-CSDN博客_回调函数

2022.08.02

----------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值