일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- ipTIME 유무선공유기
- 위드리빙 대용량 옷 수납 방수 바구니
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 삼성 갤럭시워치5
- 1개
- 두칸 프릴 오버핏 후드티
- 네스파 다야몬드은박 후드티
- 리빙앤트리 펠리컨 박스 대
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 8052 블랙라인 정사각 세면기
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- ChatGPT
- 올리비아 스텐 세면대 세트
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 긍정
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 반스 올드스쿨 VN000D3HY28
- 샤오미 미밴드 7 스마트밴드
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- Today
- Total
냥집사의 개발일지
C언어 - 공용체,열거형,typedef (union,enum,typedef) 본문
안녕하세요 오늘은 공용체, 열거형 typedef에 대해 정리해보겠습니다.
3가지 모두 하나의 포스팅으로 하기에 양이 너무 적은 거 같아서 한꺼번에 모아서 알아보아요~
1. 공용체 union
저도 실무하면서 잘 못 보는 문법인데요.
임베디드 프로그래밍에서 가끔 쓰이는 경우가 있으니 알아두시면 좋을 것 같습니다.
공용체의 선언 방식은 struct와 같습니다.
아래 포스팅을 참고해주세요~
2022.09.23 - [C언어] - C언어 - 구조체 (struct)
#include<stdio.h>
union robot{
char name;
int serial_num;
};
int main(){
union robot robot_A = {'A'};
printf("robot_A's name : %c\n",robot_A.name);
robot_A.serial_num = 1;
printf("robot_A's name : %c\n",robot_A.name);
printf("robot_A's serial_num : %d\n",robot_A.name);
printf("\n");
union robot robot_B;
robot_B.serial_num = 2;
printf("robot_B's serial_num : %d\n",robot_B.serial_num);
robot_B.name = 'B';
printf("robot_B's name : %c\n",robot_B.name);
printf("robot_B's serial_num : %d\n",robot_B.name);
return 0;
}
공용체는 여러 멤버 변수가 같은 메모리를 사용하기에 하나의 멤버 변수만 초기화하여 씁니다.
따라서 공용체를 선언과 동시에 초기화하려면 첫 번째 멤버를 초기화합니다.
아래 결과를 보면 처음 초기화 했던 멤버 변수 이외에 다른 멤버 변수를 초기화하게 되면
처음 초기화 했던 멤버 변수에 영향을 끼쳐 데이터가 손상됩니다.
ex) 1. robot_B의 serial_num 2로 초기화
2. robot_B의 name B로 초기화 (이때 serial_num data 손상)
3. robot_B의 serial_num 출력 시 손상된 data 출력되는 것을 확인할 수 있습니다.
2. 열거형 enum
열거형 enum의 선언 방법은
enum + 열거형 이름 + {열거형 멤버들}
ex. enum e {a,b,c}
열거형의 멤버는 열거형 변수에 저장될 값들을 나열합니다.
#include<stdio.h>
enum robot {Ameca, Sophia, Alpago, DALL_E};
int main(){
enum robot mr;
mr = Ameca;
switch(mr){
case Ameca:
printf("Hello Ameca\n");
break;
case Sophia:
printf("Hello Sophia\n");
break;
case Alpago:
printf("Hello Alpago\n");
break;
case DALL_E:
printf("Hello DALL_E\n");
break;
default:
printf("...");
break;
}
return 0;
}
enum 변수에 enum 멤버 중 하나를 할당합니다.
아래 결과 처럼 Ameca가 mr에 잘 할당되었음을 확인할 수 있었습니다.
TIPS
1. 열거형 변수들은 초기화하지 않으면 0부터 순서대로 됩니다.
ex. enum e {a,b,c} 이때 a = 0, b = 1, c = 2로 치환됩니다.
2. 열거형 변수 중 초기화 된초기화된 멤버 뒤 멤버 변수는 초기화된 값+1으로 치환됩니다.
ex. enum e{a = 2, b, c} 이때 a = 2, b = 3, c = 4로 치환됩니다.
ex. enum e{a, b = 7, c} 이때 a = 0, b = 7, c = 8로 치환됩니다.
3. typedef
struct 쓸 때 항상 struct를 붙여줘야 해서 불편하지 않으셨나요?
typedef를 이용해 새로운 자료형을 재정의하면 훨씬 편해집니다.
typedef 이용 방법
typedef + struct + 구조체 이름 + 새 자료형 이름
ex. typedef struct robot ROBOT
#include <stdio.h>
struct robot{
char *name;
int num;
};
typedef struct robot ROBOT;
void print_struct(ROBOT *r){
printf("robot name : %s\n",r->name);
printf("robot num : %d\n",r->num);
}
int main(){
ROBOT r = {"Sophia", 12};
print_struct(&r);
return 0;
}
struct robot을 ROBOT으로 재정의하여 정상적으로 출력하는 것을 확인할 수 있습니다.
오늘은 공용체, 열거형 typedef에 대해 정리해보았습니다.
도움이 되셨길 바라며 다음 포스팅에서 만나요~
좋은 하루 보내세요~
'C언어' 카테고리의 다른 글
C언어 - 구조체 포인터 & 구조체 배열 (struct pointer & struct array) (0) | 2022.09.25 |
---|---|
C언어 - 구조체 (struct) (2) (0) | 2022.09.24 |
C언어 - 구조체 (struct) (1) | 2022.09.23 |
C언어 - 메모리 동적 할당 (문자열) (0) | 2022.09.22 |
C언어 - 메모리 동적 할당 (calloc, realloc) (0) | 2022.09.21 |