C Programming Language/C

C์–ธ์–ด ๊ตฌ์กฐ์ฒด union, enum, typedef ๋ž€?

567Rabbit 2024. 8. 2. 15:50

 

๊ณต์šฉ์ฒด(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๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฃผ์„์„ ๋ถ™์ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ