函數指標陣列,這是一種 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 clock
switch case 4 個時,編譯 2430 bytes,執行 8136 ~ 8146 timer clock
switch case 5 個時,編譯 2458 bytes,執行 10185 ~ 10195 timer clock
將上面程式修改成函數指標陣列,以查表方式直接跳到執行的程式: