函數(shù)是C語言的核心概念。主調(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)用,專業(yè)術(shù)語稱為回調(diào)(callback),通過函數(shù)指針參數(shù)調(diào)用的第三方函數(shù)稱為回調(diào)函數(shù)。
回調(diào)可以讓被調(diào)函數(shù)(這里是指用函數(shù)指針做函數(shù)參數(shù)的函數(shù))的代碼更加泛化或抽象,能夠簡(jiǎn)單模擬其它編程語言的委托與反射語法。
1 簡(jiǎn)單模擬委托
//C語言簡(jiǎn)單模擬委托//需要用的指針函數(shù)。通過用指針函數(shù)作為地址接收函數(shù)地址,以達(dá)到委托其他函數(shù)實(shí)現(xiàn)某方法的目的。#include
2 簡(jiǎn)單模擬反射
(1)簡(jiǎn)單模擬反射
高級(jí)語言的反射機(jī)制,簡(jiǎn)單來說,就是可以通過字符串型獲取對(duì)應(yīng)的類或者函數(shù)。下面,用C來簡(jiǎn)單模擬反射:
#include
(2)利用自定義段
gcc支持通過使用 __ attribute __ ((section())),將函數(shù)、變量放到指定的數(shù)據(jù)段中。也就是說,可以讓編譯器幫我們完成上例中向數(shù)組添加成員的動(dòng)作。
借助此機(jī)制,回調(diào)函數(shù)可以在任意文件聲明,不需要修改其他文件。自定義段的起始和結(jié)束地址,可以通過變量 __ start_SECTIONNAME 和 __ stop_SECTIONNAME得到例如通過 __ attribute __ ((section("ss"))定義自定義段,其開始地址為 & __ start_ss,結(jié)束地址為 & __stop_ss。
// https://www.bejson.com/runcode/c920/#include
-
C語言
+關(guān)注
關(guān)注
180文章
7581瀏覽量
135571 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4259瀏覽量
62228 -
編譯器
+關(guān)注
關(guān)注
1文章
1607瀏覽量
48977
原文標(biāo)題:C語言使用回調(diào)函數(shù)模擬委托與反射
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論