2012-11-28 4 views
0

갖는이 노동 조합 및 stucts :조합원이 설정되어 있는지 확인할 수 있습니까?

tydef union{ 
    TYPE1 t1; 
    TYPE2 t2; 
    TYPE3 t3; 
}myunion; 

typedef struct{ 
    uint8 ID; 
    uint8 value; 
}TYPE1; 

typedef struct{ 
    uint8 ID; 
    uint8 flag; 
    long value; 
}TYPE2; 

는이 같은 기능을 실행하고 싶습니다 : 다소 다음과 같이 작동

CheckIfSet(&myunion.t1); 

:

CheckIfSet(void *test){ 
    if (test.ID != NULL) then{ 
    return TRUE; 
    } 
    return FALSE; 
} 

이 검사를 실행하기 전에를, myunion.t1을 설정해야하는 또 다른 기능을 실행 중입니다. 그러나 그것이 발생했는지 확인해야합니다.

답변

4

아니요. 어떤 공용 영역이 활성 상태인지 추적해야합니다. 노동 조합의 지원 메모리는 해당 필드에서 공유되므로 하나를 설정하면 다른 사용자의 값에 영향을 미칠 수 있습니다.

또한 union의 비활성 필드에 액세스하면 정의되지 않은 동작이 발생한다는 것을 잊지 마십시오.

0

ID 값을 사용하지 않는 값으로 초기화하고 테스트하십시오.

2

아니요, 그렇게 할 수 없습니다. 순수한 C 언어로 "설정"되는 것과 같은 것은 없습니다. 변수를 초기화하지 않았더라도 해당 변수 유형에 대해 가능한 모든 값 집합에 속하는 일부 가비지 값을 포함합니다. 이것이 유효한 값인지 가비지 값인지 구분할 방법이 없습니다.

초기화 상태를 확인하는 데 사용할 일종의 플래그를 도입해야합니다. 예를 들어, 처음에 플래그를 FALSE으로 초기화 할 수 있으며 유니언을 설정하면 TRUE으로 변경됩니다.

관련 문제