函數指標陣列,這是一種 C/C++ 程式語言的高階設計技巧,希望能有較高的執行效能。
我以 Arduino 當作測試平台,比較兩種程式設計技巧,發現與我的認知有些差異。
先看傳統設計方式,用 switch case 執行不同功能:
//
// Author: Bridan
// http://4rdp.blogspot.com
// Date: 2014/09/27
//
// Brief: Test switch case
//
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
TCCR1A = 0x00; // Normal mode, just as a Timer
TCCR1B &= ~_BV(CS12); // no prescaling
TCCR1B &= ~_BV(CS11);
TCCR1B |= _BV(CS10);
}
void loop() {
byte i;
TCNT1 = 0; // reset timer
for (i=0 ; i<3 ; i++) {
switch (i) {
case 0:
Serial.println("CASE 0");
break;
case 1:
Serial.println("CASE 1");
break;
case 2:
Serial.println("CASE 2");
break;
}
}
Serial.println(TCNT1);
}
switch case 3 個時,編譯 2410 bytes,執行 6092 ~ 6100 timer clockswitch case 4 個時,編譯 2430 bytes,執行 8136 ~ 8146 timer clock
switch case 5 個時,編譯 2458 bytes,執行 10185 ~ 10195 timer clock
將上面程式修改成函數指標陣列,以查表方式直接跳到執行的程式:



