info8995 님의 블로그

21일차(헤더 파일과 CPP 파일 분할 및 빌드 과정 이해) 본문

TIL(Today I Learned)/C++

21일차(헤더 파일과 CPP 파일 분할 및 빌드 과정 이해)

info8995 2025. 1. 15. 20:36

빌드순서

  1. 전처리(preprocessing)
    • 소스코드를 컴파일러가 이해할 수 있는 형태로 변환
    • 주요 작업:
      • #include 지시문 처리
      • #define 매크로 처리
      • 조건부 컴파일 처리
    • 결과: 전처리된 파일(.i 파일)이 생성
  2. 컴파일(compilation)
    • 전처리된 파일을 컴파일하여 어셈블리 코드로 변환
    • 주요 작업:
      • C++ 코드를 어셈블리 코드로 변환
      • 문법 오류 검출
    • 결과: 어셈블리 파일(.s 파일)이 생성
  3. 어셈블(assembly)
    • *어셈블리 코드를 바이너리 형태의 객체 파일(.obj 또는 .o)로 변환
    • 주요 작업:
      • 어셈블리 코드를 기계어로 변환
      • 기계어 코드와 심볼 테이블을 포함한 목적 파일 생성
    • 결과: 목적파일(.o 또는 .obj)이 생성
  4. 링크(linking)
    • 여러 목적 파일과 라이브버리를 결합하여 실행 가능한 프로그램 생성
    • 주요 작업:
      • 외부 **심볼 처리
      • 라이브러리 연결
    • 결과: 실행 파일(.exe) 생성

*어셈블리 코드의 정의: 저수준 언어로 작성된 코드 CPU가 이해할 수 있는 저수준 언어로 작성된 코드

**심볼의 의미: 심볼은 프로그램에서 사용되는 이름을 의미합니다. 심볼테이블은 이러한 이름을 메모리 주소나 기타 속성에 매핑합니다.

헤더 파일과 CPP 파일 분할

  1. 코드 분할의 이유
    • 유지보수 용이성: 코드가 분리되어 있으면 수정 및 디버깅이 쉬워집니다.
    • 컴파일 속도 최적화: 코드가 분리되면 수정된 부분만 다시 컴파일하면 되므로 전체 프로젝트의 빌드 시간을 줄일 수 있습니다.
    • 재사용성 증가: 헤더 파일은 여러 소스 파일에서 공통적으로 포함할 수 있어 중복 코드 작성이 줄어듭니다.
    • 협업 효율성: 여러 개발자가 같은 프로젝트를 작업할 때, 각자 다른 파일을 작업할 수 있어 충돌을 최소화할 수 있습니다.
  2. 헤더 파일의 역할
    • 함수와 클래스 선언: 함수나 클래스의 기본 형태만 선언하여 다른 소스 파일에서 사용할 수 있도록 만듭니다.
    • 헤더 가드: 같은 헤더 파일이 여러 번 포함되더라도 중복 선언을 방지합니다.
    에:

 

3. CPP 파일의 역할

  • 함수와 클래스 정의: 헤더 파일에 선언된 함수와 클래스의 구체적인 동작을 정의합니다.

예:

 

4.헤더 파일에서 구현하지 않는 이유

  • 중복 정의 방지: 헤더 파일에 함수의 구현을 포함하면, 여러 소스 파일에서 해당 헤더를 포함할 때 함수가 중복 정의되어 링커 오류가 발생합니다.
  • 모듈화: 헤더 파일은 인터페이스 역할만 하여, 구현과 분리됨으로써 코드의 가독성과 유지보수성을 높입니다.

헤더와 CPP 파일의 분할은 유지보수성과 효율성을 높이며, 빌드 과정에서도 중요한 역할을 합니다.

'TIL(Today I Learned) > C++' 카테고리의 다른 글

25일차(참조자 포인터)  (0) 2025.01.21
22일차(상수, 포인터)  (0) 2025.01.16
20일차(C++에서의 변수와 메모리 구조)  (0) 2025.01.14
19일차(Get, Set함수)  (0) 2025.01.13
16일차(vector)  (0) 2025.01.08