Language/C

📌 Chapter 17 - 선행처리기와 다중 소스 파일 - 헤더 파일 분리와 다중 소스 파일 관리

e-cko 2025. 6. 24. 14:48
반응형
반응형

5. 헤더 파일 분리와 다중 소스 파일 관리

1) 다중 소스 파일

  • 다중 소스 파일은 하나의 C 프로젝트에서 여러 개의 .c 파일을 나누어 관리하는 방식이다.
  • 이때 각 .c 파일은 하나의 모듈(module)로 취급한다.
  • 각 모듈은 역할 단위로 코드가 분리되어, 유지 보수와 재사용성이 향상된다.

다중 소스 파일 구조는 실제 개발 현장에서 표준적인 관리 방식이다.


2) 헤더 파일 분리의 기본 원칙

  • 각 소스 파일(.c)에 대한 함수 선언(원형)은 별도의 헤더 파일(.h)에 작성한다.
  • 이 헤더 파일은 해당 기능을 사용하는 다른 소스 파일에서 #include 하여 연결된다.

예를 들어:

파일명 역할
math_utils.c 실제 계산 기능 구현
math_utils.h math_utils.c의 함수 원형 정의
main.c 프로그램 실행 시작점 (main 함수)

3) Include Guard는 필수

  • 헤더 파일에는 반드시 include guard 또는 #pragma once를 사용하여 중복 포함을 방지한다.
  • 예시:

#ifndef MATH_UTILS_H

#define MATH_UTILS_H

 

// 함수 선언들

 

#endif


4) 디렉터리 구조 예시

/project

 ├── main.c

 ├── math_utils.c

 ├── math_utils.h

✳️ 이처럼 소스 파일과 헤더 파일을 1:1로 관리하는 것이 일반적이다.


5) 컴파일 방법

👉 터미널이나 명령줄에서 컴파일할 때는 모든 .c 파일을 함께 컴파일해야 한다.

gcc main.c math_utils.c -o program

-o program은 실행 파일 이름을 지정한다.


💻 예제 코드: 다중 소스 파일 구성

📁 math_utils.h (헤더 파일)

#ifndef MATH_UTILS_H

#define MATH_UTILS_H

// 함수 원형(선언)만 포함

int add(int a, int b);

int subtract(int a, int b);

int multiply(int a, int b);

float divide(int a, int b);

#endif  // MATH_UTILS_H

 

📁 math_utils.c (함수 구현)

#include "math_utils.h"

 

// 두 정수의 합을 반환

int add(int a, int b) {

    return a + b;

}

 

// 두 정수의 차를 반환

int subtract(int a, int b) {

    return a - b;

}

 

// 두 정수의 곱을 반환

int multiply(int a, int b) {

    return a * b;

}

 

// 두 정수의 나눗셈 결과(float)를 반환

float divide(int a, int b) {

    if (b == 0) {

        return 0.0f; // ⚠️ 0으로 나누는 경우 0.0 반환

    }

    return (float)a / b;

}

 

📁 main.c (프로그램 진입점)

#include <stdio.h>

#include "math_utils.h"  // 모듈 헤더 포함

 

int main() {

    int a = 10, b = 2;

 

    printf("덧셈: %d\n", add(a, b));

    printf("뺄셈: %d\n", subtract(a, b));

    printf("곱셈: %d\n", multiply(a, b));

    printf("나눗셈: %.2f\n", divide(a, b));

 

    return 0;

}

 

🖨️ 실행 결과

덧셈: 12

뺄셈: 8

곱셈: 20

나눗셈: 5.00


마무리 정리

1️ 다중 소스 파일은 기능을 나누어 구조화할 수 있는 효율적인 관리 방식이다.
2️
각 소스 파일에는 헤더 파일을 연결하고, 함수 선언을 분리하여 모듈화한다.
3️
헤더 파일에는 include guard를 사용하여 중복 포함을 방지한다.
4️
컴파일 시에는 모든 .c 파일을 한 번에 컴파일해야 한다.
5️ 이 구조를 통해 유지 보수성과 확장성이 크게 향상된다.

반응형