C語言實作狀态機
狀态機模式适用于有限狀态下程式按照邏輯循環執行,相較于在while循環中通過if else判斷狀态标志來執行相應的動作,狀态機模式能夠靈活的增加、減少狀态,程式邏輯更為清晰
使用函數指針管理狀态,每個狀态執行函數在執行完之後,傳回下一個狀态執行函數的指針,判斷state進而執行程式
//函數指針重定義
typedef int (*functpr)();
//函數指針類型轉換聲明
typedef functpr (*ptrfuncptr)();
//定義起始狀态、停止狀态、狀态1、狀态2、...
functpr start(),stop(),state1(),state2();
//1建立狀态機
void StateMachine()
{
//令狀态為“起始狀态”
ptrfuncptr state=start;
while(state!=stop)
{
//執行狀态程式,并将執行的傳回狀态指派給狀态變量
state = (ptrfuncptr)(*state)();
}
}
//2起始狀态
functpr start()
{
printf("start state machine\n");
//執行結束後傳回狀态1
return (functpr)state1;
}
//3停止狀态,關閉狀态機
functpr stop()
{
printf("stop\n");
return (functpr)stop;
}
//狀态1
functpr state1()
{
printf("turn to state1\n");
return (functpr)state2;
}
//狀态2
functpr state2()
{
printf("turn to state2\n");
return (functpr)stop;
}