공용 구조체 선언
"공용 구조체 선언"은 변수 값의 집합을 지정하고 공용 구조체 이름을 지정하는 태그를 선택적으로 지정합니다. 변수 값을 공용 구조체의 "멤버"라고 하며 변수 값은 다른 형식이 될 수 있습니다. 공용 구조체는 다른 언어의 "가변 레코드"와 비슷합니다.
구문
struct-or-union-specifier:
struct-or-union identifier opt { struct-declaration-list }struct-or-union identifier
struct-or-union:
structunion
struct-declaration-list:
struct-declarationstruct-declaration-list struct-declaration
공용 구조체 내용은 다음과 같이 정의됩니다.
struct-declaration:
specifier-qualifier-list struct-declarator-list ;specifier-qualifier-list:
type-specifier specifier-qualifier-list opttype-qualifier specifier-qualifier-list opt
struct-declarator-list:
struct-declaratorstruct-declarator-list , struct-declarator
union 형식의 변수는 해당 형식으로 정의된 값 중 하나를 저장합니다. 구조체 및 공용 구조체 선언에 같은 규칙이 적용됩니다. 공용 구조체에 비트 필드를 포함할 수도 있습니다.
공용 구조체 멤버는 불완전한 형식, void 형식 또는 함수 형식을 가질 수 없습니다. 따라서 멤버는 공용 구조체의 인스턴스가 될 수 없지만 선언할 공용 구조체 형식의 포인터가 될 수는 있습니다.
공용 구조체 형식 선언은 템플릿만 가능합니다. 변수를 선언할 때까지는 메모리가 예약되지 않습니다.
참고
두 형식의 공용 구조체가 선언되고 값이 한 개 저장되지만 다른 형식으로 공용 구조체에 액세스하는 경우 결과를 신뢰할 수 없습니다.예를 들어, float 및 int의 공용 구조체가 선언됩니다.float 값이 저장되지만 나중에 int로 값에 액세스합니다.그러면 float 값의 내부 저장소에 따라 값이 결정됩니다.정수 값은 신뢰할 수 없습니다.
예제
다음은 공용 구조체의 예제입니다.
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
이 예제에서는 sign 형식으로 공용 구조체 변수를 정의하며 멤버가 2개 있고 이름이 number인 변수를 선언합니다. svar 멤버는 부호 있는 정수이고 uvar 멤버는 부호 없는 정수입니다. 이 선언을 사용하면 number의 현재 값을 부호 있는 값이나 부호 없는 값으로 저장할 수 있습니다. 이 공용 구조체 형식과 연결된 태그는 sign입니다.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
screen 배열에 2,000개의 요소가 있습니다. 배열의 각 요소는 멤버 2개(window1 및 screenval)가 있는 개별 공용 구조체입니다. window1 멤버는 비트 필드 멤버 2개(icon 및 color)가 있는 구조체입니다. screenval 멤버는 int입니다. 지정된 시간에 각 공용 구조체 요소는 screenval로 표현되는 int나 window1로 표현되는 구조체를 포함합니다.
Microsoft 전용
중첩된 공용 구조체가 다른 구조체나 공용 구조체의 멤버일 경우 익명으로 선언할 수 있습니다. 다음은 이름 없는 공용 구조체의 예제입니다.
struct str
{
int a, b;
union / * Unnamed union */
{
char c[4];
long l;
float f;
};
char c_array[10];
} my_str;
.
.
.
my_str.l == 0L; /* A reference to a field in the my_str union */
특정 시간에 공용 구조체에 포함된 데이터의 형식을 제공하는 필드가 포함된 구조체 안에 공용 구조체가 종종 중첩됩니다. 다음은 이런 공용 구조체 선언의 예제입니다.
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
공용 구조체 참조에 대한 자세한 내용은 구조체 및 공용 구조체 멤버를 참조하십시오.
Microsoft 전용 종료