본문으로 건너뛰기

동적 메모리와 전처리예제

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. 동적 메모리 할당 과정

  1. #include <stdlib.h> 헤더 파일 추가
  2. 자료형이 일치하는 포인터 변수 선언 (ex. int *pt;)
  3. 필요한 메모리 크기 설정
  4. 메모리 할당 함수 사용 (malloc, calloc, realloc 등)
  5. 할당된 메모리는 포인터/배열처럼 사용
  6. 사용 후 반드시 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 함수 내 변수 등 런타임 값은 사용할 수 없습니다.