天天看點

<C語言>C語言實作狀态機C語言實作狀态機

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;
}
           

繼續閱讀