函數是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文章
7628瀏覽量
139669 -
函數
+關注
關注
3文章
4365瀏覽量
63847 -
編譯器
+關注
關注
1文章
1652瀏覽量
49729
原文標題:C語言使用回調函數模擬委托與反射
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
為什么中斷回調函數中不能使用接收中斷開啟函數?
VirtualLab Fusion應用:具有粗糙表面的回復反射器的反射
解鎖TSMaster fifo函數:報文讀取的高效方法

評論