色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          高效的C編程之:Switch語句

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

          14.6

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

          本文引用地址:http://cafeforensic.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;

          }

          }

          編譯后的結(jié)果如下。

          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)性能,也可以手工編寫代碼,形成程序跳轉(zhuǎn)來避免使用Switch語句。

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

          char*ConditionStr2(intcondition)

          {

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

          return

          EQ