Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- https://hjmag1120.tistory.com/
- https://vetenir.tistory.com/
- https://ji-han.tistory.com/
- https://mynameiskgws.tistory.com/
- https://eo-oe.tistory.com/
- 스파르타코딩클럽
- 태어난김에 보스까지
- 이리5조
Archives
- Today
- Total
info8995 님의 블로그
21일차(헤더 파일과 CPP 파일 분할 및 빌드 과정 이해) 본문
빌드순서
- 전처리(preprocessing)
- 소스코드를 컴파일러가 이해할 수 있는 형태로 변환
- 주요 작업:
- #include 지시문 처리
- #define 매크로 처리
- 조건부 컴파일 처리
- 결과: 전처리된 파일(.i 파일)이 생성
- 컴파일(compilation)
- 전처리된 파일을 컴파일하여 어셈블리 코드로 변환
- 주요 작업:
- C++ 코드를 어셈블리 코드로 변환
- 문법 오류 검출
- 결과: 어셈블리 파일(.s 파일)이 생성
- 어셈블(assembly)
- *어셈블리 코드를 바이너리 형태의 객체 파일(.obj 또는 .o)로 변환
- 주요 작업:
- 어셈블리 코드를 기계어로 변환
- 기계어 코드와 심볼 테이블을 포함한 목적 파일 생성
- 결과: 목적파일(.o 또는 .obj)이 생성
- 링크(linking)
- 여러 목적 파일과 라이브버리를 결합하여 실행 가능한 프로그램 생성
- 주요 작업:
- 외부 **심볼 처리
- 라이브러리 연결
- 결과: 실행 파일(.exe) 생성
*어셈블리 코드의 정의: 저수준 언어로 작성된 코드 CPU가 이해할 수 있는 저수준 언어로 작성된 코드
**심볼의 의미: 심볼은 프로그램에서 사용되는 이름을 의미합니다. 심볼테이블은 이러한 이름을 메모리 주소나 기타 속성에 매핑합니다.
헤더 파일과 CPP 파일 분할
- 코드 분할의 이유
- 유지보수 용이성: 코드가 분리되어 있으면 수정 및 디버깅이 쉬워집니다.
- 컴파일 속도 최적화: 코드가 분리되면 수정된 부분만 다시 컴파일하면 되므로 전체 프로젝트의 빌드 시간을 줄일 수 있습니다.
- 재사용성 증가: 헤더 파일은 여러 소스 파일에서 공통적으로 포함할 수 있어 중복 코드 작성이 줄어듭니다.
- 협업 효율성: 여러 개발자가 같은 프로젝트를 작업할 때, 각자 다른 파일을 작업할 수 있어 충돌을 최소화할 수 있습니다.
- 헤더 파일의 역할
- 함수와 클래스 선언: 함수나 클래스의 기본 형태만 선언하여 다른 소스 파일에서 사용할 수 있도록 만듭니다.
- 헤더 가드: 같은 헤더 파일이 여러 번 포함되더라도 중복 선언을 방지합니다.

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 |