Skip to content

Commit 6056e94

Browse files
committed
docs: C프로그래밍 활용 10
- 동적 메모리와 전처리 예제 추가
1 parent 98730e3 commit 6056e94

File tree

1 file changed

+140
-0
lines changed
  • docs/C프로그래밍-활용

1 file changed

+140
-0
lines changed

docs/C프로그래밍-활용/10.md

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
sidebar_position: 10
3+
title: 동적 메모리와 전처리예제
4+
description: 동적메모리와 전처리기의 개념 및 다양한 예제
5+
---
6+
7+
## 1. 동적 메모리 (Dynamic Memory)
8+
9+
C 프로그래밍에서 메모리 할당은 크게 **정적 할당****동적 할당**으로 나뉩니다.
10+
11+
### 1.1. 메모리 할당 방법
12+
13+
- **정적 할당 (Static Allocation)**
14+
15+
- 프로그램 시작 전에 메모리의 크기 결정
16+
- 예시:
17+
18+
```c
19+
int test[10] = {0};
20+
```
21+
22+
- **동적 할당 (Dynamic Allocation)**
23+
24+
- 프로그램 실행 도중에 동적으로 메모리 할당
25+
- 할당된 메모리는 사용 후 반드시 반납해야 함
26+
- 예시:
27+
28+
```c
29+
int *pt = (int *)malloc(10 * sizeof(int));
30+
free(pt);
31+
```
32+
33+
### 1.2. 동적 메모리 할당 과정
34+
35+
1. `#include <stdlib.h>` 헤더 파일 추가
36+
2. 자료형이 일치하는 포인터 변수 선언 (ex. `int *pt;`)
37+
3. 필요한 메모리 크기 설정
38+
4. 메모리 할당 함수 사용 (`malloc`, `calloc`, `realloc` 등)
39+
5. 할당된 메모리는 포인터/배열처럼 사용
40+
6. 사용 후 반드시 `free()`로 반납
41+
42+
**예시:**
43+
44+
```c
45+
int *pt; // 포인터 변수 선언
46+
pt = (int *)malloc(10 * sizeof(int)); // 메모리 할당
47+
free(pt); // 메모리 반납
48+
```
49+
50+
### 1.3. 동적 메모리 접근 방법
51+
52+
- **포인터 변수 및 간접 참조 연산자 사용**
53+
54+
```c
55+
*pt = 1;
56+
*(pt + 1) = 2;
57+
```
58+
59+
- **배열 인덱스 사용**
60+
61+
```c
62+
pt[8] = 9;
63+
pt[9] = 10;
64+
```
65+
66+
### 1.4. 동적 메모리 할당 함수
67+
68+
| 함수 | 설명 | 특징/예시 |
69+
| --------- | ---------------------------- | ------------------------------------------------------------------- |
70+
| `malloc` | 지정한 크기만큼 메모리 할당 | 초기값: 쓰레기값. 예시: `int *i = (int *)malloc(10 * sizeof(int));` |
71+
| `calloc` | 지정한 크기만큼 메모리 할당 | 초기값: 0. 예시: `int *i = (int *)calloc(10, sizeof(int));` |
72+
| `realloc` | 이미 할당된 메모리 크기 변경 | 예시: `i = (int *)realloc(i, 100 * sizeof(int));` |
73+
| `NULL` | 메모리 할당 실패 시 반환 | 할당 실패 여부 확인 |
74+
75+
### 1.5. 동적 메모리 반납
76+
77+
- 할당된 동적 메모리는 사용이 끝난 후 반드시 `free()` 함수로 반납해야 합니다.
78+
79+
```c
80+
free(pt);
81+
```
82+
83+
---
84+
85+
## 2. 전처리기 (Preprocessor)
86+
87+
전처리기는 **컴파일 과정 이전**에 소스 코드를 미리 처리하는 부분입니다.
88+
89+
### 2.1. 개념
90+
91+
- **전처리기(preprocessor)**: 컴파일 전 미리 컴파일 처리
92+
- 전처리기의 마지막에는 `;`를 붙이지 않음
93+
- 예시:
94+
95+
```c
96+
#include <stdio.h>
97+
#define SIZE 5
98+
```
99+
100+
### 2.2. 전처리기 지시어
101+
102+
- `#include` : 헤더파일 추가 (ex. `<stdio.h>`)
103+
- `#define` : 상수 정의 또는 매크로 함수 추가
104+
105+
- 상수 예시: `#define N 10`
106+
- 매크로 함수 예시:
107+
108+
```c
109+
#define SQ(x) ((x)*(x))
110+
```
111+
112+
- 괄호를 꼭 사용하여 연산 우선순위 문제 방지
113+
- 예시: `SQ(x+y)` → `((x+y)*(x+y))`
114+
115+
- 조건부 컴파일
116+
117+
- `#if ... #elif ... #else ... #endif`
118+
119+
- 특정 조건에 따라 코드 블록의 컴파일 여부 결정
120+
- 예시:
121+
122+
```c
123+
#if N == 10
124+
printf("N은 10입니다.\n");
125+
#endif
126+
```
127+
128+
- `#ifdef ... #else ... #endif`
129+
130+
- 특정 매크로가 정의되어 있는지 여부로 분기
131+
- 예시:
132+
133+
```c
134+
#define HYCU
135+
#ifdef HYCU
136+
printf("hycu Wonderful!\n");
137+
#endif
138+
```
139+
140+
> ⚠️ 전처리기는 컴파일 이전에 처리되므로, main 함수 내 변수 등 런타임 값은 사용할 수 없습니다.

0 commit comments

Comments
 (0)