다루는 내용
- 구조체
- 공용체
- 열거형
- typedef
- Byte Order
사용자 정의 형식은 프로그램 개발자가 구현 목적에 따라 정의하는 형식을 의미한다.
사용자 정의 형식(UDT) | |
구조체(struct) | 멤버 사이즈의 합 + padding |
공용체(union) | 제일 큰 멤버 사이즈 bytes |
1. 구조체
구조체는 여러 개의 멤버를 하나로 묶어 사용하는 형식이다. 가령, 학생 관리 프로그램에서 한 명의 학생의 데이터로 학번, 이름, 학년 등을 관리해야 한다고 할 때 학번들을 따로 관리하고, 이름을 따로 관리하고 학년을 따로 관리하는 것은 비효율적인 관리가 될 수 있다. 학생이라는 형식을 정의를 해서 학생들을 관리를 하면 좀 더 나을 수 있을 것이다.
비교
구조체를 사용하지 않는 부분은 DemoA이고 사용하는 부분은 DemoB이다.
다음은 공통적으로 사용할 열거형과 상수이다.
- 데이터 선언부
DemoA
구조체 정의 구문은 없다.
변수는 이름들을 관리하는 names, 번호들을 관리하는 snums, 학년들을 관리하는 grades,
현재까지 등록된 학생 수 usage
DemoB
_Stu 구조체와 _DemoB 구조체를 정의하고 Stu, Demo로 형식명을 정의하였다.
Stu 형식에는 한 학생의 데이터를 관리할 수 있게 정의하였고
Demo에는 학생들을 관리할 수 있게 하였다.
변수로는 DemB 형식의 demob하나이다.
데모는 학생 두 명의 데이터를 입력하여 전체 출력하는 내용으로 하였다.
- 데모 시작함수
DemoA
DemoB
- 학생 한명의 데이터 추가하는 함수
DemoA
DemoB
- 학생 한 명의 데이터를 Setting하는 함수
DemoA
DemoB
-보관된 전체 학생 데이터 출력하는 함수
DemoA
DemoB
2. 공용체
공용체는 여러 멤버중에 하나의 멤버를 사용할 수 있게 하는 형식이다. 즉, 공용체 내의 여러 멤버 중에 메모리 크기가 제일 큰 멤버 만큼만 할당을 하게 된다. 가령, 회원 관리 프로그램에서 기본 정보(이름, 아이디)만 입력하면 준회원, 주소를 추가로 입력하면 정회원이라 하자. 해당 프로그램에서 회원에 관련된 기능을 작성을 하고자 할 때 회원 기능을 정의하는 곳에서는 종류별로 기능을 정의를 하게 될 것이다. 하지만, 해당 기능을 사용하는 곳에서는 회원 종류에 상관없이 사용할 수 있다면 좀 더 나을 것이다.
Look and Think and Feel
공통 |
#define MAX_MNAME_LEN 20 #define MAX_ID_LEN 50 #define MAX_ADDR_LEN 100 |
-준회원
PreMember.h |
typedef struct _PreMember PreMember; struct _PreMember { char name[MAX_MNAME_LEN+1]; char id[MAX_ID_LEN+1]; }; |
PreMember.c |
void PreMemberView(PreMember *pthis) { printf("이름:%s 아이디:%s\n",pthis->name,pthis->id); } |
-정회원
RealMember.h |
typedef struct _RealMember RealMember; struct _RealMember { PreMember pre; char addr[MAX_ADDR_LEN+1]; }; |
RealMember.c |
void RealMemberView(RealMember *pthis) { PreMemberView(&(pthis->pre)); printf("주소:%s\n",pthis->addr); } |
-회원
Member.h |
typedef enum _TypeMember TypeMember; enum _TypeMember { MEM_PRE, MEM_REAL }; typedef union _MemberInfo MemberInfo; union _MemberInfo { PreMember premember; RealMember realmember; }; typedef struct Member Member; struct Member { TypeMember typemember; MemberInfo meminfo; }; |
Member.c |
void MemberView(Member *pthis) { switch(pthis->typemember) { case MEM_PRE: PreMemberView(&(pthis->meminfo.premember)); break; case MEM_REAL: RealMemberView(&(pthis->meminfo.realmember)); break; } } |
3. 열거형
열거형은 데이터 값을 미리 열거해 놓는 형식을 얘기한다. 사용자 정의 리터럴 상수로 생각해도 큰 무리가 없을 듯하다.
앞서 얘기했듯이 C언어에서 열거형은 int형으로 취급이 되며 C++에서는 별도의 형식으로 취급을 한다.
구조체와 공용체를 보면서 Look & Feel했으리라 믿게 과감히 설명을 생략한다.
'언어 자료구조 알고리즘 > C 언어 문법' 카테고리의 다른 글
12. 증감연산자 (0) | 2009.08.19 |
---|---|
11. 산술 연산자 (0) | 2009.08.19 |
10. 연산자 (0) | 2009.08.19 |
9. 변수의 종류 (0) | 2009.08.19 |
8. 변수의 선언과 초기화 (5) | 2009.08.19 |
6.메커니즘 형식 - 배열, 포인터 (0) | 2009.08.19 |
5.기본 형식 - 문자, 정수, 실수형 (0) | 2009.08.19 |
4. 형식(type -자료형) (0) | 2009.08.19 |
3.헤더파일과 소스파일의 내용 (0) | 2009.08.19 |
2. 프로그램 구성 요소 (0) | 2009.08.19 |