函數是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文章
7614瀏覽量
137720 -
函數
+關注
關注
3文章
4346瀏覽量
62973 -
編譯器
+關注
關注
1文章
1642瀏覽量
49286
原文標題:C語言使用回調函數模擬委托與反射
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言如何處理函數的返回值
C語言中的socket編程基礎
請問ESP32C3 I2S驅動支持回調函數獲取數據嗎?
為什么無法停止使用cy_wcm_connect 的rtos定時器回調函數?
C語言內存泄漏問題原理
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>內存泄漏問題原理](https://file1.elecfans.com/web2/M00/C4/F2/wKgZomX5CPGAHxynAAAdVE956KA826.png)
評論