동적 메모리와 전처리예제
1. 동적 메모리 (Dynamic Memory)
C 프로그래밍에서 메모리 할당은 크게 정적 할당과 동적 할당으로 나뉩니다.
1.1. 메모리 할당 방법
-
정 적 할당 (Static Allocation)
-
프로그램 시작 전에 메모리의 크기 결정
-
예시:
int test[10] = {0};
-
-
동적 할당 (Dynamic Allocation)
-
프로그램 실행 도중에 동적으로 메모리 할당
-
할당된 메모리는 사용 후 반드시 반납해야 함
-
예시:
int *pt = (int *)malloc(10 * sizeof(int));
free(pt);
-
1.2. 동적 메모리 할당 과정
#include <stdlib.h>헤더 파일 추가- 자료형이 일치하는 포인터 변수 선언 (ex.
int *pt;) - 필요한 메모리 크기 설정
- 메모리 할당 함수 사용 (
malloc,calloc,realloc등) - 할당된 메모리는 포인터/배열처럼 사용
- 사용 후 반드시
free()로 반납
예시:
int *pt; // 포인터 변수 선언
pt = (int *)malloc(10 * sizeof(int)); // 메모리 할당
free(pt); // 메모리 반납
1.3. 동적 메모리 접근 방법
-
포인터 변수 및 간접 참조 연산자 사용
*pt = 1;
*(pt + 1) = 2; -
배열 인덱스 사용
pt[8] = 9;
pt[9] = 10;
1.4. 동적 메모리 할당 함수
| 함수 | 설명 | 특징/예시 |
|---|---|---|
malloc | 지정한 크기만큼 메모리 할당 | 초기값: 쓰레기값. 예시: int *i = (int *)malloc(10 * sizeof(int)); |
calloc | 지정한 크기만큼 메모리 할당 | 초기값: 0. 예시: int *i = (int *)calloc(10, sizeof(int)); |
realloc | 이미 할당된 메모리 크기 변경 | 예시: i = (int *)realloc(i, 100 * sizeof(int)); |
NULL | 메모리 할당 실패 시 반환 | 할당 실패 여부 확인 |
1.5. 동적 메모리 반납
- 할당된 동적 메모리는 사용이 끝난 후 반드시
free()함수로 반납해야 합니다.
free(pt);
2. 전처리기 (Preprocessor)
전처리기는 컴파일 과정 이전에 소스 코드를 미리 처리하는 부분입니다.
2.1. 개념
- 전처리기(preprocessor): 컴파일 전 미리 컴파일 처리
- 전처리기의 마지막에는
;를 붙이지 않음 - 예시:
#include <stdio.h>
#define SIZE 5
2.2. 전처리기 지시어
-
#include: 헤더파일 추가 (ex.<stdio.h>) -
#define: 상수 정의 또는 매크로 함수 추가-
상수 예시:
#define N 10 -
매크로 함수 예시:
#define SQ(x) ((x)*(x))- 괄호를 꼭 사용하여 연산 우선순위 문제 방지
- 예시:
SQ(x+y)→((x+y)*(x+y))
-
-
조건부 컴파일
-
#if ... #elif ... #else ... #endif-
특정 조건에 따라 코드 블록의 컴파일 여부 결정
-
예시:
#if N == 10
printf("N은 10입니다.\n");
#endif
-
-
#ifdef ... #else ... #endif-
특정 매크로가 정의되어 있는지 여 부로 분기
-
예시:
#define HYCU
#ifdef HYCU
printf("hycu Wonderful!\n");
#endif
-
-
⚠️ 전처리기는 컴파일 이전에 처리되므로, main 함수 내 변수 등 런타임 값은 사용할 수 없습니다.