null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
⌂
c-lang-advanced
Structure
advanced-pointers
•
Function Pointer
•
Pointer to Pointer
•
Void Pointer
data-structures
•
Linked List
•
Stack & Queue
•
Tree & Graph
algorithms
•
Sorting Algorithms
•
Complexity Analysis
bit-ops
•
Bitwise Operators
•
Bit Fields
•
Bit Tricks
system-prog
•
Process
•
Signal
•
IPC (Inter-Process Communication)
concurrency
•
Threads Basics
•
Mutex & Semaphore
•
Race Condition
optimization
•
Compiler Flags
•
Cache Locality
•
Profiling
design-patterns
•
OOP in C
•
Callback Pattern
•
State Machine
project
•
Mini Shell
•
TCP Echo Server
Flow Structure
Callback Pattern
23 / 25
Mini Shell
☆ Star
↗ Full
State Machine
#c
#c-lang
#advanced
#design-patterns
#state-machine
@devpc
|
2026-03-29 13:49:35
|
GET /api/v1/flows/6/nodes/87?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# State Machine > 상태 테이블, enum+함수 포인터로 FSM 구현 ## 학습 목표 - 유한 상태 머신(FSM)의 개념과 구성 요소를 이해한다 - `enum`과 함수 포인터 테이블로 FSM을 구현한다 - 상태 전환 테이블 방식의 장점을 파악한다 ## 내용 ### FSM 구성 요소 ``` States : 시스템이 취할 수 있는 상태 집합 Events : 상태 전환을 일으키는 입력 Transitions : (현재 상태 + 이벤트) → 다음 상태 + 액션 ``` ### enum으로 상태·이벤트 정의 ```c // 신호등 예시 typedef enum { ST_RED, ST_GREEN, ST_YELLOW, ST_COUNT } State; typedef enum { EV_TICK, EV_COUNT } Event; ``` ### 함수 포인터 기반 FSM ```c typedef State (*TransitionFn)(void); State on_red_tick(void) { printf("RED → GREEN\n"); return ST_GREEN; } State on_green_tick(void) { printf("GREEN → YELLOW\n"); return ST_YELLOW; } State on_yellow_tick(void) { printf("YELLOW → RED\n"); return ST_RED; } // 상태 전환 테이블: [state][event] → 함수 TransitionFn fsm_table[ST_COUNT][EV_COUNT] = { [ST_RED] = { [EV_TICK] = on_red_tick }, [ST_GREEN] = { [EV_TICK] = on_green_tick }, [ST_YELLOW] = { [EV_TICK] = on_yellow_tick }, }; // FSM 실행 State fsm_run(State current, Event ev) { TransitionFn fn = fsm_table[current][ev]; if (fn) return fn(); return current; // 정의되지 않은 전환은 상태 유지 } int main() { State s = ST_RED; for (int i = 0; i < 6; i++) s = fsm_run(s, EV_TICK); return 0; } ``` ### 상태 진입/탈출 액션 추가 ```c typedef struct { TransitionFn transition; void (*on_enter)(void); void (*on_exit)(void); } StateHandler; ``` ## 참고 - FSM은 프로토콜 파서, 게임 AI, UI 상태 관리, 임베디드 펌웨어에 폭넓게 사용된다 - 상태가 많아지면 상태 전환 테이블이 if-else 체인보다 훨씬 관리하기 쉽다
Callback Pattern
Mini Shell
// COMMENTS
ON THIS PAGE
No content selected.