enum ADC__enlSRState {
ADC__nReset,
ADC__nActive,
ADC__nGetMux2,
ADC__nGetMux3,
ADC__nGetFuel,
ADC__nGetTwoPinSensors,
ADC__nlastState = ADC__nGetTwoPinSensors
};
ADC__nlastState 作為枚舉邊界哨兵,用於判斷數值是否為有效枚舉值:
// 推薦寫法:使用哨兵
if (e <= ADC__nlastState) { /* 有效值 */ }
// 不推薦:硬編碼具體值
if (e <= ADC__nGetTwoPinSensors) { /* 有效值 */ }
當需添加新狀態時:
enum ADC__enlSRState {
// ...原有項目
ADC__nGetTwoPinSensors,
ADC__nGetThreePinSensors, // 新增
ADC__nlastState = ADC__nGetThreePinSensors // 只需修改這裡
};
所有使用 ADC__nlastState 的判斷邏輯無需任何修改即可自動適配新增值。
const char* stateNames[ADC__nlastState + 1] = {
"Reset", "Active", "GetMux2", "GetMux3", "GetFuel", "GetTwoPinSensors"
};
for (int i = ADC__nReset; i <= ADC__nlastState; ++i) {
// 遍歷所有狀態
}
_Static_assert(ADC__nlastState == ADC__nGetTwoPinSensors,
"請更新 ADC__nlastState 以匹配最新枚舉值");
這是 C 語言中防御性編程的經典技巧,通過引入維護邊界的哨兵值,實現「單點修改、全局生效」,顯著降低維護成本和出錯風險。