函數(shù)是C語(yǔ)言的核心概念。主調(diào)函數(shù)(caller)調(diào)用被調(diào)函數(shù)(callee)是一般的調(diào)用關(guān)系,如果被調(diào)函數(shù)(callee)參數(shù)包含函數(shù)指針,函數(shù)指針還可以形成多一層的調(diào)用關(guān)系,形成第三方函數(shù)的調(diào)用,專(zhuān)業(yè)術(shù)語(yǔ)稱(chēng)為回調(diào)(callback),通過(guò)函數(shù)指針參數(shù)調(diào)用的第三方函數(shù)稱(chēng)為回調(diào)函數(shù)。
回調(diào)可以讓被調(diào)函數(shù)(這里是指用函數(shù)指針做函數(shù)參數(shù)的函數(shù))的代碼更加泛化或抽象,能夠簡(jiǎn)單模擬其它編程語(yǔ)言的委托與反射語(yǔ)法。
1 簡(jiǎn)單模擬委托
//C語(yǔ)言簡(jiǎn)單模擬委托//需要用的指針函數(shù)。通過(guò)用指針函數(shù)作為地址接收函數(shù)地址,以達(dá)到委托其他函數(shù)實(shí)現(xiàn)某方法的目的。#include
2 簡(jiǎn)單模擬反射
(1)簡(jiǎn)單模擬反射
高級(jí)語(yǔ)言的反射機(jī)制,簡(jiǎn)單來(lái)說(shuō),就是可以通過(guò)字符串型獲取對(duì)應(yīng)的類(lèi)或者函數(shù)。下面,用C來(lái)簡(jiǎn)單模擬反射:
#include
(2)利用自定義段
gcc支持通過(guò)使用 __ attribute __ ((section())),將函數(shù)、變量放到指定的數(shù)據(jù)段中。也就是說(shuō),可以讓編譯器幫我們完成上例中向數(shù)組添加成員的動(dòng)作。
借助此機(jī)制,回調(diào)函數(shù)可以在任意文件聲明,不需要修改其他文件。自定義段的起始和結(jié)束地址,可以通過(guò)變量 __ start_SECTIONNAME 和 __ stop_SECTIONNAME得到例如通過(guò) __ attribute __ ((section("ss"))定義自定義段,其開(kāi)始地址為 & __ start_ss,結(jié)束地址為 & __stop_ss。
// https://www.bejson.com/runcode/c920/#include
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7642瀏覽量
144516 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4405瀏覽量
66791 -
編譯器
+關(guān)注
關(guān)注
1文章
1669瀏覽量
51057
原文標(biāo)題:C語(yǔ)言使用回調(diào)函數(shù)模擬委托與反射
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
詳解hal_entry入口函數(shù)
C語(yǔ)言中的內(nèi)聯(lián)函數(shù)與宏
大彩講堂:VisualHMI-LUA教程-on_press回調(diào)函數(shù)使用指南
大彩講堂:VisualHMI-LUA教程-on_run回調(diào)函數(shù)使用指南
深入理解C語(yǔ)言:函數(shù)—編程中的“積木塊”藝術(shù)
如何使用自定義設(shè)置回調(diào)函數(shù)?
為什么中斷回調(diào)函數(shù)中不能使用接收中斷開(kāi)啟函數(shù)?
為什么不需要給回調(diào)函數(shù)傳遞參數(shù)
VirtualLab Fusion應(yīng)用:具有粗糙表面的回復(fù)反射器的反射
解鎖TSMaster fifo函數(shù):報(bào)文讀取的高效方法
C語(yǔ)言如何處理函數(shù)的返回值
EE-128:C語(yǔ)言中的DSP:從C調(diào)用匯編類(lèi)成員函數(shù)

C語(yǔ)言使用回調(diào)函數(shù)模擬委托與反射
評(píng)論