新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 高效的C編程之:Switch語句

        高效的C編程之:Switch語句

        作者: 時間:2013-09-30 來源:網(wǎng)絡 收藏

        14.6

        編譯器通常將C語言中的編譯一個(TableLookup)以便跳轉到合適的入口處。

        本文引用地址:http://www.104case.com/article/257019.htm

        下面的例子顯示了編譯器如何處理程序中的Switch語言的。

        C源程序如下。

        char*ConditionStr1(intcondition)

        {

        switch(condition)

        {

        case0:returnEQ;

        case1:returnNE;

        case2:returnCS;

        case3:returnCC;

        case4:returnMI;

        case5:returnPL;

        case6:returnVS;

        case7:returnVC;

        case8:returnHI;

        case9:returnLS;

        case10:returnGE;

        case11:returnLT;

        case12:returnGT;

        case13:returnLE;

        case14:return;

        default:return0;

        }

        }

        編譯后的結果如下。

        ConditionStr1:

        0000807CE1A01000MOVr1,r0

        >>>SWITCH#3switch(condition)

        00008080E351000ECMPr1,#0xe

        00008084908FF101ADDLSpc,pc,r1,LSL#2

        00008088EA00003BB0x817cSWITCH#20>

        0000808CEA00000DB0x80c8SWITCH#5>

        00008090EA00000FB0x80d4SWITCH#6>

        00008094EA000011B0x80e0SWITCH#7>

        00008098EA000013B0x80ecSWITCH#8>

        0000809CEA000015B0x80f8SWITCH#9>

        000080A0EA000017B0x8104SWITCH#10>

        000080A4EA000019B0x8110SWITCH#11>

        000080A8EA00001BB0x811cSWITCH#12>

        000080ACEA00001DB0x8128SWITCH#13>

        000080B0EA00001FB0x8134SWITCH#14>

        000080B4EA000021B0x8140SWITCH#15>

        000080B8EA000023B0x814cSWITCH#16>

        000080BCEA000025B0x8158SWITCH#17>

        000080C0EA000027B0x8164SWITCH#18>

        000080C4EA000029B0x8170SWITCH#19>

        對于代碼,的入口為4字節(jié);Thumb代碼的入口為1或2個字節(jié)(當Case情況小于32時,使用入口為1字節(jié)的查找表)。所以當使用時,應盡量較少Case分支。

        另外,為了提高系統(tǒng)性能,也可以手工編寫代碼,形成程序跳轉來避免使用Switch語句。

        下面的例子顯示對上面Switch分支語句的改寫。

        char*ConditionStr2(intcondition)

        {

        if((unsigned)condition>=15)return0;

        return

        EQ

        主站蜘蛛池模板: 定远县| 泽库县| 邯郸市| 常山县| 清镇市| 柘城县| 那坡县| 读书| 义乌市| 苍溪县| 榕江县| 册亨县| 双桥区| 乳源| 丹棱县| 若羌县| 股票| 兰州市| 枣阳市| 镇江市| 文化| 镇安县| 湘潭市| 新平| 马山县| 泗洪县| 青神县| 木里| 淮滨县| 永登县| 梨树县| 西平县| 邻水| 霍城县| 黄骅市| 开原市| 抚松县| 太仓市| 南康市| 祁门县| 海门市|