상태 머신에서 함수에 대한 포인터를 사용 중이며 enum의 결합체에서 빌드 된 열거 형 값을 전달해야합니다. 함수 호출이있는 테이블을 사용할 때 호출/반환 값이 필요합니다.C에서 enum의 유니온 (union) 사용하기
prog.c: In function 'main': prog.c:12:15: error: expected expression before 'FOO' NewFooState(FOO.D); // <<<<<< This is what fails!!
typedef enum Foo_t {A, B, C, D} FOO;
typedef enum Bar_t {E, F, G} BAR;
typedef union FooBar_t {FOO Foo; BAR Bar;} FooBar;
FooBar NewFooState(FooBar NewState);
//I want to later make call such as
int main(){
NewFooState(FOO.D); // <<<<<< This is what fails!!
return 0;
}
//and have that function look like:
FooBar NewFooState(FooBar NewState){
static FooBar oldState = {.Foo=A};
FooBar ReturnValue = oldState;
oldState = NewState;
switch (NewState.Foo){
case A:
case B:
case C:
case D:
//stuff
break;
}
return ReturnValue ;
}
주 oldstate가 초기화하는 데 필요한 특정 방식 : 나는 오류를 받고 있어요 codeChef으로 GCC C 4.9.2를 사용하여 내 로컬 상자와 CodeChef에이를 구축하는 것을 시도했다
static FooBar oldState = {.Foo=A};
내 문제는 내가 같은 {.Foo = G}, FooBar_t.Bar으로 나에게 분명히 볼 수있는 구문의 모든 조합을 시도했습니다 열거 값 등 FooBar.Bar.G을 사용하는 것으로 보인다. G, Bar.G, G, 등하지만 컴파일러를 받아 들일 수 없습니다. 나는 F와 같은 열거 형 값 중 하나를 사용하고 NewFooState (F)와 같은 NewFooState 함수를 호출하기를 원한다. NewFooState (G)와 나는 오류 오류를 얻고있다 ... 너무 간단해야 [Pe167가] :
G는 필드 아니다, 그것의 자신의 ID입니다. – jxh
'NewFooState (G)'가 제공하는 컴파일러 오류는 무엇입니까? – aschepler
jxh, 이상하게도 NewState에서 충분한 전환이 제대로 컴파일되고 작동하는 것처럼 보입니다. – MountainLogic