欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2313|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

C語言else if與switch怎么用比較合適?在多分支的時候,有沒有效率說法?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:734017 發(fā)表于 2022-4-15 23:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教一下,謝謝大家

例如:uchar Reuse_count=0;        //復(fù)用計時
bit Reuse=0;        //復(fù)用計時標(biāo)志


void TM0_Isr() interrupt 1                                        //定時器0中斷
{               
        Reuse=~Reuse;

}


void time_sharing()
{
        if(Reuse)
        {
                Reuse=~Reuse;
                Reuse_count++;
               
        }

}

void Reuse_time_sharing()
{
        if(Reuse_count==1)
               
                else if(Reuse_count==2)
               
                        else if(Reuse_count==3)
                                
                                else if(Reuse_count==4)
                                       
                                        else if(Reuse_count==5)
                                                
                                                else if(Reuse_count==6)
                                                        
                                                        else if(Reuse_count==7)
                                                               
                                                                else if(Reuse_count==8)
                                                                        
                                                                        else if(Reuse_count==9)
                                                                                
                                                                                else if(Reuse_count==10)
                                                                                       
                                                                                        else(Reuse_count==11)
                                                                                                                                                                                       
                                                                                                Reuse_count=0;
                                                                                       
}

void Reuse_time_sharing()
{
        switch(Reuse_count)
                case 1 : break;
                case 2 : break;
                case 3 : break;
                case 4 : break;
                case 5 : break;
                case 6 : break;
                case 7 : break;
                case 8: break;
                case 9 : break;
                case 10 : break;
                case 11 : Reuse_count=0;break;
        default;
}
在多分支的時候,有沒有效率說法?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:47286 發(fā)表于 2022-4-16 01:15 | 只看該作者
我認(rèn)為有 但具體哪個效率高不好說 要請懂匯編且研究過這個的大俠了 以前我也問過這問題 多數(shù)人回答的也比較模糊

我的理解是 if和else if組合 不是if的時候 會嘗試第一個else if 再不是就嘗試第二個 一直下去 直到有匹配的 那么假如每次都是11 就是每次都要全走一遍

switch可能在底層有個類似表的東西 先匹配分支數(shù) 如果在范圍內(nèi)直接跳到對應(yīng)分支 不在范圍就走default

理論上多分支的時候switch快 但實際上不知道 因為我不知道假如真有這么個表一類的東西  去比較它開銷有多大 僅編譯長度而言 分支少用if編譯結(jié)果小 分支多用switch編譯結(jié)果小
回復(fù)

使用道具 舉報

板凳
ID:624769 發(fā)表于 2022-4-16 03:16 | 只看該作者
先說一個小問題,
Reuse_count=0;
應(yīng)該在 ++ 的函數(shù)里面重置,或者在 switch 的 default 里面重置, if 也是一樣的道理。
你現(xiàn)在這樣的寫法, 后續(xù)會有很多隱患。

然后說一下,if, switch
執(zhí)行效率來講
如果,你都是連續(xù)數(shù)的話, switch  一定是優(yōu)于 else if 的。
如果,非連續(xù)數(shù),跳躍也沒有規(guī)律的話,switch 和 else if 差不多, 但是優(yōu)于純 if, (這里說一下,你這里的判斷,其實光用if 執(zhí)行結(jié)果也沒有區(qū)別但是效率的話,綜合下來 else if 會高點)

編譯后代碼量而言,
看你選項多少,由于switch 需要建表,選項太少的話,switch 不劃算。

可讀性來講,
個人覺得,只要選項超過3個,怎么看都是 switch 可讀性更高。
回復(fù)

使用道具 舉報

地板
ID:47286 發(fā)表于 2022-4-16 12:37 | 只看該作者
188610329 發(fā)表于 2022-4-16 03:16
先說一個小問題,
Reuse_count=0;
應(yīng)該在 ++ 的函數(shù)里面重置,或者在 switch 的 default 里面重置, if  ...

為什么連續(xù)數(shù)switch比if高 我覺得應(yīng)該是和有效條件的順序有關(guān)吧 假如都是10個分支 有效分支2多 if就比switch高 有效分支10多 switch就比if效率高 如果沒規(guī)律 那就是有效分支數(shù)小的多 if效率高 反之switch高 假如這個理解成立 用if的話把常用分支盡量往前寫效率會高點 是么
回復(fù)

使用道具 舉報

5#
ID:824490 發(fā)表于 2022-4-16 13:13 | 只看該作者
一直以來個人都是是這么鑄的:并列if超過3個,建議用switch,
if 是每一個if都要判斷一次符合了再執(zhí)行,是順序執(zhí)行的,而switch只判斷一次,就跳到對應(yīng)的語句去執(zhí)行。類似查表。
如果理解沒錯的話,switch從代碼可讀性、邏輯結(jié)構(gòu)方面都比if強(qiáng)的多,當(dāng)然,并列if少的話,差別可能不明顯,所以才在“3條以上if 用switch”這個說法。
歡迎拍磚!
回復(fù)

使用道具 舉報

6#
ID:677275 發(fā)表于 2022-4-16 14:17 | 只看該作者
可讀性問題,沒有效率之說
回復(fù)

使用道具 舉報

7#
ID:1018878 發(fā)表于 2022-4-16 14:25 | 只看該作者
有時效果是一樣的,根據(jù)情況而定
回復(fù)

使用道具 舉報

8#
ID:401564 發(fā)表于 2022-4-16 15:14 | 只看該作者
個人感覺沒有必要去管這個效率的
沒有看過兩個語句編譯后的代碼,但我敢肯定,這兩者的效率相差絕對不會太大
在99.999%的情況下,用哪個都行,單純的個人習(xí)慣而已
至少到現(xiàn)在為止,我沒有碰到過非得用switch絕對不能用if,或者是非得用if而絕對不能用switch的情況
回復(fù)

使用道具 舉報

9#
ID:491577 發(fā)表于 2022-4-16 15:23 | 只看該作者
這個有點鉆牛角尖啦,現(xiàn)在單片機(jī)資源足夠多,價格也足夠便宜了,你覺得有可能用else if與switch其中一個單片機(jī)就可以運(yùn)行,用另一個單片機(jī)就不可以運(yùn)行嗎?其實不需要糾結(jié)這個問題,你熟悉哪一個就用哪一個最終效果都一樣。說到效率匯編更高,但是為什么用C的卻比較多呢?主要是C更容易學(xué),更多人熟悉。
回復(fù)

使用道具 舉報

10#
ID:624769 發(fā)表于 2022-4-16 15:46 | 只看該作者
dzbj 發(fā)表于 2022-4-16 12:37
為什么連續(xù)數(shù)switch比if高 我覺得應(yīng)該是和有效條件的順序有關(guān)吧 假如都是10個分支 有效分支2多 if就比swi ...

剛才試了將近半個小時, 沒有能夠 “重現(xiàn)” (也許是KEIL版本,也許設(shè)置), 即:  沒圖沒真相系列, 你或者其他人不信就當(dāng)我胡說八道吧。
以下是我說的效率區(qū)別的基本差異點,你如果有幸“重現(xiàn)” 我當(dāng)初的測試結(jié)果,希望能幫我存?zhèn)圖。
Switch 的選擇,
當(dāng)非連續(xù)的選擇值的時候,是依據(jù)的 CJNE 來依次判斷 跳轉(zhuǎn)的,這個和  else if  編譯后得到的結(jié)果是一樣的。所以,這個時候, switch 僅僅是可讀性高了。

當(dāng)連續(xù)值選擇的時候, switch 編譯后 會 利用   JMP  @A+DPTR  來直接跳轉(zhuǎn)到有效項。(這個我以前測試的時候出現(xiàn)過,前面想重現(xiàn),始終編譯不出來這個結(jié)果)  而這個跳轉(zhuǎn)的效率 是遠(yuǎn)高于 CJNE 的依次判斷跳轉(zhuǎn)的。
不過,由于剛才始終重現(xiàn)不了這個編譯結(jié)果,所以這個結(jié)論你就看看算了。就當(dāng)switch 任何時候效率都和 else if 一樣吧。
回復(fù)

使用道具 舉報

11#
ID:382454 發(fā)表于 2022-4-16 16:26 | 只看該作者
else if一般喜歡用兩個,而switch可以篩選好多個。
回復(fù)

使用道具 舉報

12#
ID:47286 發(fā)表于 2022-4-16 21:44 | 只看該作者
188610329 發(fā)表于 2022-4-16 15:46
剛才試了將近半個小時, 沒有能夠 “重現(xiàn)” (也許是KEIL版本,也許設(shè)置), 即:  沒圖沒真相系列, 你或者 ...

哦 收到 那我當(dāng)效率一樣吧 不管對錯 你這回答是我看見的第一個肯定回答 上次我問的時候 得到的回答基本也都是不太確定 怎么說都有
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表