곡μ©μ²΄(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 |