๊ณต์ฉ์ฒด(union) : ์ ๋์จ
- ์๋ฒ ๋๋์์คํ , ์ปค๋ ๋ฑ ๋ฐ์ดํฐ ์ฉ๋ ์ ํ์ด ์ฌํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ๋ฌ ๊ฐ์ ๋ณ์๊ฐ ๊ณต์
- ๊ณต์ฉ์ฒด๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์กฐ์ฒด์ ์์ฃผ ๋น์ท
union example{
โโโโchar c; //๊ฐ์ ๊ณต๊ฐ ๊ณต์
โโโโint i; //๊ฐ์ ๊ณต๊ฐ ๊ณต์
};
#include <stdio.h>
union example{
โโโโint i;
โโโโchar c;
};
int main(void)
{
โโโโunion example v;
โโโโv.c = 'A';
โโโโprintf("v.c:%c v.i:%i\n", v.c, v.i);
โโโโ
โโโโv.i = 10000; //v.i๋ v.c์ ๊ฐ์ ์์ญ์ ๊ณต์ ํ๋ฏ๋ก v.c๊ฐ 10000์ผ๋ก ๋ฐ๋๋ค.
โโโโprintf("v.c:%c v.i:%i\n", v.c, v.i);
}
์์
// ํ๋ฒ ๋๋ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ํ๋๋ง ์
๋ ฅํ๋ฉด ๋๋ ๊ฒฝ์ฐ
#include <stdio.h>
#include <string.h>
#define STU_NUMBER 1
#define REG_NUMBER 2
struct student {
โโโโint type;
โโโโunion{
โโโโโint stu_number; //ํ๋ฒ
โโโโโโโโchar reg_number[15]; //์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ
โโโโ} id; //๋ณ์ ์ด๋ฆ ์ ์ธ
โโโโchar name[20];
};
void print(struct studnet s)
{
โโโโswitch(s.type)
โโโโ{
โโโโโโโโcase STU_NUMBER;
โโโโโโโโโโโโprintf("ํ๋ฒ %d\n", s.id.stu_number);
โโโโโโโโโโโโprintf("์ด๋ฆ %s\n", s.name);
โโโโโโโโโโโโbreak;
โโโโโโโโcase REG_NUMBER;
โโโโโโโโโโโโprintf("์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ %s\n", s.id.reg_number);
โโโโโโโโโโโโprintf("์ด๋ฆ %s\n", s.name);
โโโโโโโโโโโโbreak;
โโโโโโโโdefault:
โโโโโโโโโโโโprintf("ํ์
์ค๋ฅ\n");
โโโโโโโโโโโโbreak;
โโโโ}
}
์ด๊ฑฐํ(enumeration) : enum
๋ณ์๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ์ด๊ฑฐํด ๋์ ์๋ฃํ
ex) ์์ผ์ ์ ์ฅํ๊ณ ์๋ ๋ณ์๋ {์ผ์์ผ, ์์์ผ, ํ์์ผ, ์์์ผ, ๋ชฉ์์ผ, ๊ธ์์ผ, ํ ์์ผ} ์ค์ ํ๋์ ๊ฐ๋ง ๊ฐ์ง ์ ์๋ค
enum days { SUN, MON, TUE, WED, THU, FRI, SAT };

์ด๊ฑฐํ ๋ณ์ ์ ์ธ
enum days today;
today = SUN; // OK!
์ด๊ฑฐํ ๋ณ์ ์ด๊ธฐํ
- ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด 0๋ถํฐ ํ ๋นํ๋ค.
enum days { SUN, MON, TUE, WED, THU, FRI, SAT };
enum days { SUN=1, MON, TUE, WED, THU, FRI, SAT };
enum days { SUN=7, MON=1, TUE, WED, THU, FRI, SAT=6 };
์ด๊ฑฐํ๊ณผ ๋ค๋ฅธ ๋ฐฉ๋ฒ๊ณผ์ ๋น๊ต
- define๋ฌธ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.

typedef

- ์๋ฃํ์ ์ด๋ฆ์ ๋ค์ ์ ์ํจ
- ๋ฐ์ดํฐ ํ์ ์ int, long ๋ฑ ์ฌ๋ฌ๊ฐ์ง๋ก ์ ์๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ๋ณต์กํ ํ์ ์ ์ธ์ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค.
- typedef๋ ์ฌ์ฉ์ ์ ์ ํ์ ์ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํ์ ์ ๋ณ๋ช ์ ๋ถ์ด๋ ๋ฐ ์ ์ฉ
์์
struct point {
โโโโint x;
โโโโint y;
};
typedef struct point point_t; // ์ด๋ฆ์ ๋ค์ ์ ์ํจ
point_t a, b;
typedef์ #define ๋น๊ต
1. ์ด์์ฑ์ ๋์ฌ์ค๋ค
- ์ด์์ฑ(Portability)์ ์ํํธ์จ์ด๊ฐ ๋ค์ํ ์ปดํจํฐ ์์คํ ์ด๋ ํ๊ฒฝ์์ ์คํ๋ ์ ์๋ ๋ฅ๋ ฅ์ ์๋ฏธ
- ์ฆ, ํน์ ํ๋ซํผ์์ ๊ฐ๋ฐ๋ ์ํํธ์จ์ด๊ฐ ์ต์ํ์ ์์ ๋ง์ผ๋ก ๋ค๋ฅธ ํ๋ซํผ์์๋ ๋ฌธ์ ์์ด ๋์ํ ์ ์๋๊ฐ๋ฅผ ๋ปํจ
- Redirection(๋ฆฌ๋ค์ด๋ ์ )ํ๋ ๊ฒ๋ค์ ์ด์์ฑ์ ๋์ฌ์ฃผ๊ณ ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ๋ง๋ ๋ค.
- Redirection(๋ฆฌ๋ค์ด๋ ์ )์ ์ปดํจํ ์์ ํ๋ก๊ทธ๋จ์ ์ ๋ ฅ ๋๋ ์ถ๋ ฅ์ ๊ธฐ๋ณธ ์์น์์ ๋ค๋ฅธ ์์น๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋ฏธ.
์ผ๋ฐ์ ์ผ๋ก ๋ช ๋ น์ด์ ์ ์ถ๋ ฅ์ ํ์ผ์ด๋ ๋ค๋ฅธ ๋ช ๋ น์ด๋ก ์ ํํ ๋ ์ฌ์ฉ
- ์ฝ๋๋ฅผ ์ปดํจํฐ ํ๋์จ์ด์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค
- ex) intํ์ 2๋ฐ์ดํธ์ด๊ธฐ๋ ํ๊ณ 4๋ฐ์ดํธ, intํ ๋์ ์ typedef๋ฅผ ์ด์ฉํ INT32๋ INT16์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํ์คํ๊ฒ 2๋ฐ์ดํธ์ธ์ง 4๋ฐ์ดํธ์ธ์ง๋ฅผ ์ง์ ํ ์ ์๋ค.
2. #define์ ์ด์ฉํด๋ typedef์ ๋น์ทํ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค. ์ฆ ๋ค์๊ณผ ๊ฐ์ด int32๋ฅผ ์ ์ํ ์ ์๋ค.
- #define UINT32 unsigned int
- typedef float VECTOR[2]; // #define์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค
3. ๋ฌธ์ํ์ ์ญํ ๋ ํ๋ค
- typedef๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฃผ์์ ๋ถ์ด๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ
'C Programming Language > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C์ธ์ด ํฌ์ธํฐ์ ํ์ฉ : const, volatile, void ํฌ์ธํฐ (0) | 2024.08.12 |
---|---|
C์ธ์ด ํฌ์ธํฐ์ ํ์ฉ : ์ด์ค ํฌ์ธํฐ, ํฌ์ธํฐ ๋ฐฐ์ด, ํจ์ ํฌ์ธํฐ (0) | 2024.08.02 |
C์ธ์ด ๊ตฌ์กฐ์ฒด์ ๋ณ์, ๋ฐฐ์ด , ํฌ์ธํฐ, ํจ์ (0) | 2024.08.02 |
C์ธ์ด ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ (0) | 2024.07.11 |
C์ธ์ด ๋ฌธ์์ ๋ฌธ์์ด์ ๋ํด ํ์ตํ๊ธฐ (0) | 2024.07.10 |