前段時(shí)間寫了篇介紹命令行交互工具,不知道各位有沒(méi)去看看源碼,里邊有個(gè)寫法和前段時(shí)間介紹的鏈表使用很像,這就是等下介紹的表驅(qū)編程模式,表驅(qū)的核心就是“表格”,在多條件判斷的時(shí)候會(huì)使用到多if嵌套,或者switch語(yǔ)法進(jìn)行處理,但是這樣寫有時(shí)候也挺麻煩的,在這樣的場(chǎng)景下就可以考慮使用表驅(qū)編程模式,把需要處理的事件或數(shù)據(jù)放到對(duì)應(yīng)的表格中,最后就形成了一整個(gè)表,就可以進(jìn)行查表然后進(jìn)行對(duì)應(yīng)操作,下面舉個(gè)簡(jiǎn)單案例:
| 頭文件
#include "stdio.h"
#include "stdint.h"
typedef struct
{
void(*fp)(void);
} static_t;
extern static_t static_cmd[];
void shell_ls_cmd(void);
void shell_test_cmd(void);
void shell_test_fp(void);
void handle(void);
void push(void (*fp)(void));
void free(uint8_t select);
|定義一個(gè)表
static_tstatic_cmd[]=
{
{shell_ls_cmd},
{shell_test_cmd},
{NULL}
};
| 定義回調(diào)函數(shù)
void shell_ls_cmd(void)
{
printf("ls command
");
}
void shell_test_cmd(void)
{
printf("test command
");
}
void shell_test_fp(void)
{
printf("fp command
");
}
| 遍歷表
void handle(void)
{
for (uint8_t i = 0; static_cmd[i].fp != NULL; i++)
{
static_cmd[i].fp();
}
}
| 添加表格
void push(void (*fp)(void))
{
uint8_t i = 0;
// 寫法1
for(i = 0; static_cmd[i].fp != NULL; i++){};
// 寫法2
/*
while(static_cmd[i].fp != NULL){
i++;
}
*/
static_cmd[i].fp = fp;
static_cmd[i+1].fp = NULL;
}
|刪除表格
void free(uint8_t select)
{
if(static_cmd[select].fp == NULL)
{
return;
}
for (uint8_t i = select; static_cmd[i].fp != NULL; i++)
{
static_cmd[i].fp = static_cmd[i+1].fp;
}
}
|簡(jiǎn)單調(diào)用
int main()
{
handle();
printf("
");
push(shell_test_fp);
printf("
");
handle();
printf("
");
free(1);
printf("
");
handle();
while (1)
{
/* code */
}
}
|查看結(jié)果

表驅(qū)在項(xiàng)目中很常見,適當(dāng)使用能有效提高代碼的可讀性,也方便后期維護(hù)的迭代!
-
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1957瀏覽量
88572 -
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145666 -
編程
+關(guān)注
關(guān)注
90文章
3716瀏覽量
97212 -
源碼
+關(guān)注
關(guān)注
8文章
685瀏覽量
31338 -
命令行
+關(guān)注
關(guān)注
0文章
83瀏覽量
10768
原文標(biāo)題:C語(yǔ)言|表驅(qū)動(dòng)
文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī),微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)一下,用AVR studio 5如何用C語(yǔ)言表達(dá)attiny85的進(jìn)入睡眠?
[C語(yǔ)言開發(fā)技術(shù)詳解].戴建華.掃描版
C語(yǔ)言指針詳解
C++ 語(yǔ)言命令詳解(第二版)
50套C語(yǔ)言試題答案詳解的資料免費(fèi)下載
現(xiàn)代交互技術(shù)下的兒童語(yǔ)言表達(dá)訓(xùn)練方法
單片機(jī)C語(yǔ)言和匯編語(yǔ)言混合編程實(shí)例詳解
詳解C語(yǔ)言中的短路現(xiàn)象
C語(yǔ)言表驅(qū)動(dòng)詳解
評(píng)論