공용 구조체 선언Union Declarations

"공용 구조체 선언"은 변수 값의 집합을 지정하고 공용 구조체 이름을 지정하는 태그를 선택적으로 지정합니다.A "union declaration" specifies a set of variable values and, optionally, a tag naming the union. 변수 값을 공용 구조체의 "멤버"라고 하며 변수 값은 다른 형식이 될 수 있습니다.The variable values are called "members" of the union and can have different types. 공용 구조체는 다른 언어의 "가변 레코드"와 비슷합니다.Unions are similar to "variant records" in other languages.

구문Syntax

struct-or-union-specifier:struct-or-union-specifier:
struct-or-union identifier opt{ struct-declaration-list }struct-or-union identifier opt{ struct-declaration-list }

struct-or-union identifierstruct-or-union identifier

struct-or-union:struct-or-union:
tructstruct

unionunion

struct-declaration-list:struct-declaration-list:
struct-declarationstruct-declaration

struct-declaration-list struct-declarationstruct-declaration-list struct-declaration

공용 구조체 내용은 다음과 같이 정의됩니다.The union content is defined to be

struct-declaration:struct-declaration:
specifier-qualifier-list struct-declarator-list ;specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list:specifier-qualifier-list:
type-specifier specifier-qualifier-list opttype-specifier specifier-qualifier-list opt

type-qualifier specifier-qualifier-list opttype-qualifier specifier-qualifier-list opt

struct-declarator-list:struct-declarator-list:
struct-declaratorstruct-declarator

struct-declarator-list , struct-declaratorstruct-declarator-list , struct-declarator

union 형식의 변수는 해당 형식으로 정의된 값 중 하나를 저장합니다.A variable with union type stores one of the values defined by that type. 구조체 및 공용 구조체 선언에 같은 규칙이 적용됩니다.The same rules govern structure and union declarations. 공용 구조체에 비트 필드를 포함할 수도 있습니다.Unions can also have bit fields.

공용 구조체 멤버는 불완전한 형식, void 형식 또는 함수 형식을 가질 수 없습니다.Members of unions cannot have an incomplete type, type void, or function type. 따라서 멤버는 공용 구조체의 인스턴스가 될 수 없지만 선언할 공용 구조체 형식의 포인터가 될 수는 있습니다.Therefore members cannot be an instance of the union but can be pointers to the union type being declared.

공용 구조체 형식 선언은 템플릿만 가능합니다.A union type declaration is a template only. 변수를 선언할 때까지는 메모리가 예약되지 않습니다.Memory is not reserved until the variable is declared.

참고

두 형식의 공용 구조체가 선언되고 값이 한 개 저장되지만 다른 형식으로 공용 구조체에 액세스하는 경우 결과를 신뢰할 수 없습니다.If a union of two types is declared and one value is stored, but the union is accessed with the other type, the results are unreliable. 예를 들어, floatint의 공용 구조체가 선언됩니다.For example, a union of float and int is declared. float 값이 저장되지만 나중에 int로 값에 액세스합니다.A float value is stored, but the program later accesses the value as an int. 그러면 float 값의 내부 저장소에 따라 값이 결정됩니다.In such a situation, the value would depend on the internal storage of float values. 정수 값은 신뢰할 수 없습니다.The integer value would not be reliable.

예제Examples

다음은 공용 구조체의 예제입니다.The following are examples of unions:

union sign   /* A definition and a declaration */  
{  
    int svar;  
    unsigned uvar;  
} number;  

이 예제에서는 sign 형식으로 공용 구조체 변수를 정의하며 멤버가 2개 있고 이름이 number인 변수를 선언합니다. svar 멤버는 부호 있는 정수이고 uvar 멤버는 부호 없는 정수입니다.This example defines a union variable with sign type and declares a variable named number that has two members: svar, a signed integer, and uvar, an unsigned integer. 이 선언을 사용하면 number의 현재 값을 부호 있는 값이나 부호 없는 값으로 저장할 수 있습니다.This declaration allows the current value of number to be stored as either a signed or an unsigned value. 이 공용 구조체 형식과 연결된 태그는 sign입니다.The tag associated with this union type is 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개의 요소가 있습니다.The screen array contains 2,000 elements. 배열의 각 요소는 멤버 2개(window1screenval)가 있는 개별 공용 구조체입니다.Each element of the array is an individual union with two members: window1 and screenval. window1 멤버는 비트 필드 멤버 2개(iconcolor)가 있는 구조체입니다.The window1 member is a structure with two bit-field members, icon and color. screenval 멤버는 int입니다.The screenval member is an int. 지정된 시간에 각 공용 구조체 요소는 int로 표현되는 screenvalwindow1로 표현되는 구조체를 포함합니다.At any given time, each union element holds either the int represented by screenval or the structure represented by window1.

Microsoft 전용Microsoft Specific

중첩된 공용 구조체가 다른 구조체나 공용 구조체의 멤버일 경우 익명으로 선언할 수 있습니다.Nested unions can be declared anonymously when they are members of another structure or union. 다음은 이름 없는 공용 구조체의 예제입니다.This is an example of a nameless union:

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 */  

특정 시간에 공용 구조체에 포함된 데이터의 형식을 제공하는 필드가 포함된 구조체 안에 공용 구조체가 종종 중첩됩니다.Unions are often nested within a structure that includes a field giving the type of data contained in the union at any particular time. 다음은 이런 공용 구조체 선언의 예제입니다.This is an example of a declaration for such a union:

struct x  
{  
    int type_tag;  
    union  
    {  
      int x;  
      float y;  
    }  
}  

공용 구조체 참조에 대한 자세한 내용은 구조체 및 공용 구조체 멤버를 참조하세요.See Structure and Union Members for information about referencing unions.

Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

선언자 및 변수 선언Declarators and Variable Declarations