#pragma overlay=off
char result;
如果今天ram不敷大,例如是8051,就要把該陣列放在flash內了,不外要注重flash存取速度會不會很慢,以IAR為例:
char (* const code func_x[2])(int arg) = {Func1, Func2};
上述程式會履行Func2,因為(arg=5)<8,所以result=20翻譯至於其他型另外函式,依樣畫葫蘆就可以了。
void main(void)
該程式碼的記憶體就不會利用共用的模式來處理,所以ram的利用量就要大增了,至於要勾銷掉overlay?或是使用reentrant?就要好好權衡了。
看成出function table的履行時,例如8051,會有overlay memory的毛病產生,詳細緣由請參考前一篇切磋什麼是overlay memory的文章,該文章已寫出keil c的解決方法,但假如是IAR怎麼辦?只要在程式碼的開首加上:
{
至於該若何應用呢?例若有5個按鍵,就能夠做出5個內容的陣列,按下1號鍵時產生數字0……、5號鍵是數字4,此時就可以利用這個function table,如許就可以免去5個if…else,如果有20個按鍵,就少了20個,很輕易保護。
留意code的關頭字是51系列獨有的翻譯
char (*func_x[2])(int arg) = {Func1翻譯社 Func2};
C說話中function table要怎麼寫? char (* const func_x[2])(int arg) = {Func1, Func2}; result = (*func_x[1])(5); char Func2(int a) { return a<8 ? 20 : 30; } } 假如都不處置,看成沒看到也行,那就要求老天保佑了,就是compiler沒有疊到不該疊的地方了。 char Func1(int a) { return a>5 ? 10 : 20; } //這行的意思是說,宣告有兩個內容陣列,而該內容的型態是函數,該函數的型態是char* func(int arg); 假如是KEIL C呢?
本文來自: http://blog.udn.com/cchahacaptain/2303219有關各國語文翻譯公證的問題歡迎諮詢天成翻譯公司02-77260931