函数是C语言的核心概念。主调函数(caller)调用被调函数(callee)是一般的调用关系,如果被调函数(callee)参数包含函数指针,函数指针还可以形成多一层的调用关系,形成第三方函数的调用,专业术语称为回调(callback),通过函数指针参数调用的第三方函数称为回调函数。
回调可以让被调函数(这里是指用函数指针做函数参数的函数)的代码更加泛化或抽象,能够简单模拟其它编程语言的委托与反射语法。
1 简单模拟委托
//C语言简单模拟委托//需要用的指针函数。通过用指针函数作为地址接收函数地址,以达到委托其他函数实现某方法的目的。#include
2 简单模拟反射
(1)简单模拟反射
高级语言的反射机制,简单来说,就是可以通过字符串型获取对应的类或者函数。下面,用C来简单模拟反射:
#include
(2)利用自定义段
gcc支持通过使用 __ attribute __ ((section())),将函数、变量放到指定的数据段中。也就是说,可以让编译器帮我们完成上例中向数组添加成员的动作。
借助此机制,回调函数可以在任意文件声明,不需要修改其他文件。自定义段的起始和结束地址,可以通过变量 __ start_SECTIONNAME 和 __ stop_SECTIONNAME得到例如通过 __ attribute __ ((section("ss"))定义自定义段,其开始地址为 & __ start_ss,结束地址为 & __stop_ss。
// https://www.bejson.com/runcode/c920/#include
-
C语言
+关注
关注
180文章
7616浏览量
138078 -
函数
+关注
关注
3文章
4350浏览量
63078 -
编译器
+关注
关注
1文章
1643浏览量
49349
原文标题:C语言使用回调函数模拟委托与反射
文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言如何处理函数的返回值
C语言中的socket编程基础
请问ESP32C3 I2S驱动支持回调函数获取数据吗?
为什么无法停止使用cy_wcm_connect 的rtos定时器回调函数?
C语言内存泄漏问题原理

评论