C 프로그래밍 입문/구조체와 유니온 데이터: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Joshuajh (토론 | 기여)
Joshuajh (토론 | 기여)
215번째 줄:
 
===== 유니온 (Union) =====
 
유니온 구조는 '공용체'로 번역 되기도 하며, 문법적인 구조는 구조체와 동일하나 모든 멤버 변수들이 하나의 메모리 공간을 공유한다는 점이 다르다. 원래 유니온은 프로그램 코드의 다형성을 구현하기 위해 만들어진 것으로, 비슷한 동작을 하지만 동작의 대상이 되는 데이터의 타입이 여러 종류인 경우에 함수의 매개 변수로 많이 사용된다. 일단 다음의 코드를 보자, 분명한 차이점을 보이기 위해 아직 언급하지 않은 내용들이 많이 사용 되었지만 그다지 어렵지는 않을 것 이다.
 
<div style='border: dashed 1px #0000ff; background: #f0f0ff; padding: 7px; margin: 10px 0px 10px 0px;'>
<source lang="c" line="GESHI_NORMAL_LINE_NUMBERS">
#include <stdio.h>
union union_test_type {
char smsg[20];
long int limsg;
};
 
int check_diff(int target_type, union union_test_type a, union union_test_type b)
{
switch(target_type) {
case 0:
return a.limsg - b.limsg;
break;
case 1:
return strcmp(a.smsg, b.smsg);
break;
default:
break;
}
return 0;
}
 
int main (int argc, char *argv[])
{
union union_test_type a, b;
 
printf("Size of union: %d\n", sizeof(union union_test_type));
a.limsg = 10;
b.limsg = 20;
printf("Differental for integer: %d\n", check_diff(0, a, b));
 
strcpy(a.smsg, "Hello World!");
strcpy(b.smsg, "Hello C World!");
printf("Differental for message: %d\n", check_diff(1, a, b));
 
return 0;
}
</source></div>
 
객체지향 언어를 아는 사람이라면 그런 언어들에서 사용되는 함수나 연산자 오버로딩에 비하면 불편하기 짝이 없어 보이겠지만 나름대로 프로그래밍의 자유도를 높이는데 큰 역활을 해준다.
 
먼저 사용된 변수와 C 예약어들을 간단하게 나마 설명해 보겠다. 먼저, '''sizeof() 연산자는 지정된 변수나 타입에 할당되어질 메모리 공간의 크기를 바이트단위로 알아내 주는 '연산자'이다.''' '함수'가 아닌 '연산자'이기 때문에 변수 뿐 아니라 변수의 타입도 사용될 수 있는 것이니 나중에 함수를 배울때 헷갈리지 않도록 주의해야 한다. switch-case구조는 switch 문에 지정된 변수의 값과 동일한 case 문에 해당되는 문장을 수행는 제어구조 이다. 위의 샘플을 예로 들자면 target_type변수의 값이 0이면 case 0: 아래에 있는 문장이 수행되고, 1이면 case 1: 아래에 있는 문장이 수행된다. 자세한 설명은 나중에 제어구조에서 하도록 할 것이다.
 
==== 주석 및 참고자료 ====