RICIS_IN() 與 IS_IN() 的效果相同。這個陳述式會採用物件指標及檢查的狀態名稱作為引數。狀態的名稱格式為 <object>_<state>。
例如,若要在 Furnace 物件從一個狀態變更為另一個狀態之前,確定它未處於 faultS 狀態,您可以使用下列 IS_IN() 陳述式作為對 Furnace 的狀態圖中轉移的保護:
[!IS_IN(me,Furnace_faultS)]
#define IS_IN(me, state) state##_IN((me))
這個巨集會呼叫為狀態產生的 IN() 作業。請參閱檢查物件的狀態。
參照狀態時,必須使用產生的狀態名稱。當參照具有相同名稱的同層級狀態時,這個方法可能有點困難。例如,如果物件 A 具有 And 狀態 B 和現行狀態 B1 和 B2,且每個狀態都具有子狀態 C,則會為這些狀態產生下列列舉值:
/*states enumeration: */
enum A_Enum{ A_RiCNonState=0, A_B=1, A_B2=2,
A_B2_C=3, A_B1=4, A_C=5 }
B1 的子狀態 C 所產生名稱為 A_C。 因此,若要查看 A 是否在 B1 的 C 中,將使用適當的巨集呼叫 IS_IN(me, A_C),而不是 IS_IN(me, A_B1_C)。