女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言簡(jiǎn)單模擬委托與簡(jiǎn)單模擬反射

GReq_mcu168 ? 來(lái)源:小智雅匯 ? 作者:小智雅匯 ? 2022-03-09 17:17 ? 次閱讀

函數(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
typedefvoid(*fun)();//typedef把void(*)()類(lèi)型重命名為fun
voidfunc(fun);//被調(diào)函數(shù)
voidfunc_1();//回調(diào)函數(shù)1
voidfunc_2();//回調(diào)函數(shù)2

intmain()//主函數(shù)用做主調(diào)函數(shù)
{
func(func_1);
funf=func_2;
f();
func(func_1);
func(func_2);
getchar();
return0;
}
voidfunc(funf)//funf為地址,fun*f為f指向的地址的量或者其他
{
printf("func
");
if(f!=NULL)
{
f();
}
}
voidfunc_1()
{
printf("func_1
");
}
voidfunc_2()
{
printf("func_2
");
}
/*
func
func_1
func_2
func
func_1
func
func_2
*/

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
#include

typedefvoid(*callback)(void);

typedefstruct{
constchar*name;
callbackfn;
}callback_t;

voidf0();
voidf1();

callback_tcallbacks[]={
{"cmd0",f0},
{"cmd1",f1},
};

voidf0()//回調(diào)函數(shù)0
{
printf("cmd0");
}

voidf1()//回調(diào)函數(shù)1
{
printf("cmd1");
}

voiddo_callback(constchar*name)
{
size_ti;
for(i=0;isizeof(callbacks)/sizeof(callbacks[0]);i++){
if(!strcmp(callbacks[i].name,name)){
callbacks[i].fn();
}
}
}

intmain()
{
do_callback("cmd1");
getchar();
return0;
}

(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
#defineSEC__attribute__((__section__("ss"),aligned(sizeof(void*))))

voidfunc_1(inta,intb)
{
printf("%s%d%d
",__func__,__LINE__,a+b);
}
voidfunc_2(inta,intb)
{
printf("%s%d%d
",__func__,__LINE__,a*b);
}

//編譯器會(huì)自動(dòng)提供__start_ss,__stop_ss標(biāo)志段ss的起止地址
externsize_t__start_ss;
externsize_t__stop_ss;

typedefstruct{
void(*p)(int,int);
}node_t;

//結(jié)構(gòu)體變量a位于自定義段ss
SECnode_ta={
.p=func_1,
};
SECnode_tb={
.p=func_2,
};
intmain(intargc,char**argv)
{
inta=3,b=4;
node_t*p;
//遍歷段ss,執(zhí)行node_t結(jié)構(gòu)中的p指向的函數(shù)
for(p=(node_t*)&__start_ss;pnode_t*)&__stop_ss;p++){
p->p(a,b);
a+=1;b+=2;
}
}
/*
func_167
func_21024

*/

原文標(biāo)題:C語(yǔ)言使用回調(diào)函數(shù)模擬委托與反射

文章出處:【微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 參數(shù)
    +關(guān)注

    關(guān)注

    11

    文章

    1866

    瀏覽量

    32855
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140199
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4367

    瀏覽量

    64155

原文標(biāo)題:C語(yǔ)言使用回調(diào)函數(shù)模擬委托與反射

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    簡(jiǎn)單交通燈并簡(jiǎn)單模擬車(chē)輛運(yùn)行方向

    一個(gè)簡(jiǎn)單的交通燈,并用布爾數(shù)組模擬車(chē)輛運(yùn)行方向。新手學(xué)習(xí),請(qǐng)多多指教,努力改進(jìn)。
    發(fā)表于 04-27 13:31

    求各種簡(jiǎn)單模擬電路圖

    求各種簡(jiǎn)單模擬電路圖
    發(fā)表于 04-07 22:16

    單模光纖-你應(yīng)該選擇什么樣的?

    的多樣性決定的。本文不僅僅涉及ITU-T和IEC的術(shù)語(yǔ),也提及了簡(jiǎn)單的ITU-T G.65X。總體上有19種不同的單模光纖,它們的型號(hào)是由ITU-T定義的,這里將介紹一下單模光纖的種類(lèi)。 每種類(lèi)型的
    發(fā)表于 08-24 11:39

    藍(lán)牙單模和雙模的區(qū)別

    藍(lán)牙4.0是在藍(lán)牙技術(shù)的基礎(chǔ)上發(fā)展起來(lái)的,既同于藍(lán)牙,又區(qū)別于傳統(tǒng)藍(lán)牙。藍(lán)牙4.0設(shè)備分單模和雙模兩種,雙模簡(jiǎn)稱(chēng)BR,商標(biāo)為Bluetooth Smart Ready;單模簡(jiǎn)稱(chēng)BLE或者LE,商標(biāo)為
    發(fā)表于 11-29 14:15

    DigiPCBA 庫(kù)遷移系列 - 簡(jiǎn)單模

    簡(jiǎn)單界面模式和高級(jí)模式兩種模式,文中介紹了四種方式來(lái)讓您以簡(jiǎn)單模式訪問(wèn)遷移器。庫(kù)遷移器的簡(jiǎn)單模式會(huì)根據(jù)其對(duì)源庫(kù)和連接的工作區(qū)的分析,軟件自己在后臺(tái)會(huì)經(jīng)過(guò)一系列的處理,預(yù)先自動(dòng)選擇遷移過(guò)程的所有方面,然后
    發(fā)表于 07-08 09:56

    塔臺(tái)模擬機(jī)飛行進(jìn)程單模塊的設(shè)計(jì)與實(shí)現(xiàn)

    飛行進(jìn)程單模塊是管制員用來(lái)記錄飛行計(jì)劃基本信息、管制員指令等相關(guān)內(nèi)容信息,是塔臺(tái)模擬機(jī)系統(tǒng)中的一個(gè)重要功能模塊。分析了面向服務(wù)架構(gòu)(SOA)體系的概念及其所具有的
    發(fā)表于 12-14 14:02 ?26次下載

    LOG100的簡(jiǎn)單模式對(duì)數(shù)放大電路

    LOG100的簡(jiǎn)單模式對(duì)數(shù)放大電路 如圖所示為L(zhǎng)OG100的簡(jiǎn)單模式對(duì)數(shù)放大電路。信號(hào)輸入電流I1、I2經(jīng)過(guò)LOG100變換為對(duì)數(shù)輸出VOUT=K·LOG(I1/I2)。從
    發(fā)表于 05-15 23:06 ?4642次閱讀
    LOG100的<b class='flag-5'>簡(jiǎn)單模</b>式對(duì)數(shù)放大電路

    SIMULINK簡(jiǎn)單模型的建立及模型特點(diǎn)

    SIMULINK簡(jiǎn)單模型的建立及模型特點(diǎn)1、簡(jiǎn)單模型的建立    exp5_1.mdl(1)建立模型窗口(2)將功能模塊由模塊庫(kù)窗口復(fù)制到模型窗口(3)對(duì)模塊進(jìn)
    發(fā)表于 06-19 12:48 ?2861次閱讀

    S7-200簡(jiǎn)單模擬量編程程序

    西門(mén)子S7-200簡(jiǎn)單模擬量編程范例,西門(mén)子S7-200簡(jiǎn)單模擬量編程范例,TITLE=//子程序1:數(shù)據(jù)采集部份
    發(fā)表于 06-21 12:02 ?1w次閱讀

    簡(jiǎn)單模擬控制的單相VIENNA整流器研究

    針對(duì)單相單開(kāi)關(guān)三電平(VIENNA)整流器提出了新的簡(jiǎn)單模擬控制方案。該方案以單周期控制技術(shù)為基礎(chǔ),結(jié)構(gòu)簡(jiǎn)單,無(wú)需R-S 觸發(fā)器,在實(shí)現(xiàn)較高輸入功率因數(shù)的同時(shí),僅用單個(gè)電壓環(huán)即
    發(fā)表于 09-22 16:30 ?64次下載
    <b class='flag-5'>簡(jiǎn)單模擬</b>控制的單相VIENNA整流器研究

    單模單纖與單模雙纖的區(qū)別

    單模單纖與單模雙纖的區(qū)別? 單模單纖(single mode single fiber,SMF)和單模雙纖(single mode dual fiber,SMDF)是光纖通信中常見(jiàn)的兩
    的頭像 發(fā)表于 12-08 10:41 ?6256次閱讀

    單模光纖和多模光纖的型號(hào)區(qū)別是什么

    。纖維芯是光信號(hào)的主要傳輸介質(zhì),而包層則用于保護(hù)纖維芯并提供反射光信號(hào)的內(nèi)部反射。 模式結(jié)構(gòu) 單模光纖和多模光纖的最主要區(qū)別在于它們的纖維芯的尺寸和傳輸模式。 單模光纖:
    的頭像 發(fā)表于 04-09 17:30 ?2447次閱讀

    單模單纖與單模雙纖的哪個(gè)穩(wěn)定?

    單模單纖與單模雙纖是兩種常見(jiàn)的光纖通信方式,它們?cè)诜€(wěn)定性、傳輸距離、成本等方面存在一定的差異。 一、單模單纖與單模雙纖的基本概念 1.1 單模
    的頭像 發(fā)表于 08-08 17:03 ?1742次閱讀

    簡(jiǎn)單認(rèn)識(shí)單模光纖耦合器

    單模光纖耦合器(Single Mode Fiber Coupler)是一種專(zhuān)門(mén)設(shè)計(jì)用于單模光纖的光學(xué)器件,它屬于光被動(dòng)元件領(lǐng)域,主要用于實(shí)現(xiàn)光信號(hào)的分路/合路,或用于延長(zhǎng)光纖鏈路。在光纖通信系統(tǒng)中,單模光纖耦合器扮演著至關(guān)重要的
    的頭像 發(fā)表于 08-09 10:08 ?1034次閱讀

    多模和單模的光纜哪個(gè)更貴

    單模光纜通常比多模光纜更貴,具體原因如下: 光纖成本: 單模光纖:設(shè)計(jì)用于長(zhǎng)距離傳輸,制造工藝更復(fù)雜,材料要求更高,導(dǎo)致成本相對(duì)較高。 多模光纖:適用于短距離傳輸,制造工藝相對(duì)簡(jiǎn)單,材料成本較低
    的頭像 發(fā)表于 04-27 09:54 ?170次閱讀