2012-04-09 2 views
2

노동 조합과 관련하여 의심의 여지가 있습니다.런타임시 노동 조합의 멤버를 구별하는 방법

union emp{ 
    float f; 
    int i; 
}; 

으로 정의 된 공용 구조체가 있다고 가정합니다. 어떤 공용 영역이 사용되는지 결정하는 방법이 있습니까? 나는 used.The 기능은 사전에

void print(union u){ 

    // if float field is initialized 
    printf("float field = %f\n",u.f); 

    // if int field is initialized 
    printf("int field = %d\n",u.i); 


} 

감사 등이있다 내가 INT 필드 인 경우 부동 소수점 필드가 사용 및 인쇄 INT 경우 플로트를 인쇄해야하는 상황을 가로 질러왔다.

답변

6

union으로는 알 수 없습니다. 일반적으로 어떤 종류의 태그 값을 포함하는 struct에 포장합니다.

struct val { 
    enum { EMP_INT, EMP_FLOAT } tag; 
    union emp { 
    int i; 
    float f; 
    } emp; 
}; 
1

은별로, 어떤 분야에 따라 당신은 메모리가 float 또는 int 중 하나로 해석됩니다 액세스 할 수 있습니다.

최상의 선택은 구조체의 공용 부분을 만들고 어떤 필드가 사용되는지 나타내는 플래그를 유지하는 것입니다.

1

정보를 런타임에 저장할 수 없습니다. 수동으로 유형을 저장하는

struct emp { 
     enum storedValue type; 
     union { 
       float f; 
       int i; 
     } 
}; 

:

당신이 뭔가를 할 수 있습니다. 열거 형은 floatvalintval 또는 이와 유사한 값을 갖습니다.

열거 형 대신 isFloat과 같은 부울을 사용할 수 있습니다.