프로그래밍 언어/C & C++ 정리

분할 컴파일

게임 개발 2023. 2. 21. 17:57

헤더 파일과 cpp 파일을 구분해놓지 않으면 여러모로 번거로운 일이 생긴다.

예를 들어서, 두 개의 지원 함수를 하나의 별도의 파일에 넣었다고 가정한다면,

양쪽 파일에 있는 그 함수 모두 그 구조체 선언을 사용하기 때문이며,

일일이 번거롭게 그것들을 직접 타이핑하면 실수를 저지를 위험도 있을 뿐만 아니라,

변경할 일이 생기면 둘 다 변경해 주어야 한다.

 

쉽게 말해서, 하나의 프로그램을 여러 파일에 펼칠 때에는 새로운 문제가 발생한다.

 

그러므로 원본 프로그램을 다음 과 같이 세 부분으로 분할할 수 있다.

분할 기준은 다음과 같다.

 

  • 구조체 선언과, 그 구조체를 사용하는 함수들의 원형이 들어 있는 헤더 파일 = .h
  • 그 구조체에 관련된 함수들의 코드가 들어 있는 소스 코드 파일 = .cpp
  • 그 구조체에 관련된 함수들을 호출하는 코드가 들어 있는 소스 코드 파일 = .cpp

이러한 방법은 프로그램을 조지갛는 매우 유용한 방법이다.

 

함수의 정의나 변수 선언은 헤더 파일에 넣으면 안 된다.

이는 달리 말해서 함수의 정의나 변수 선언이 cpp에만 있어야 한다는 뜻이다.

즉, 헤더 파일에 없는 이유는 다음과 같다.

 

함수 정의를 헤더 파일에 넣고 나서, 하나의 프로그램을 구성하는

두 파일에 그 헤더 파일을 각각 포함시키면,

한 프로그램에 같은 함수 정의가 두 번 있게 되어 에러가 발생한다.

흔히 헤더 파일에는 다음과 같은 것들을 넣는데.

 

  • 함수 원형
  • #define이나 const를 사용하여 정의하는 기호 상수
  • 구조체 선언
  • 클래스 선언
  • 템플릿 선언
  • 인라인 함수

 

이다.

 

구조체 선언은 변수를 만들지 않기 때문에 헤더 파일에 포함시켜도 된다.

구저체 선언은, 소스 코드 파일 안에 구조체 변수를 선언했을 때 

그것을 만드는 방법을 컴파일러에게 지시하는 역할을 하기 때문이다.

 

템플릿 선언도 마찬가지로 컴파일되는 코드가 아니다.

템플릿 선언은, 소스 코드에서 발견된 함수 호출에 대응하는

함수 정의를 생성하는 방법을 컴파일러에게 지시하는 역할을 한다.

 

const로 선언된 데이터와 인라인 함수는 특별한 링크 속성을 가지고 있기 때문에

헤더 파일에 넣어도 문제가 생기지 않는다.

 

파일 이름이 괄호로 묶여있을 경우

 

컴파일러는 표준 헤더 파일들이 들어 있는 호스트 시스템의

파일 시스템 영역에서 파일을 찾는다.

 

큰따옴표로 묶여 있을 경우

 

컴파일러는 먼저 현재 작업 디렉토리나 소스 코드 디렉토리에서 파일을 찾는다.

 

 

만약 해당 영역에서 파일을 찾지 못하면,

그 다음 표준 위치에서 파일을 찾는다.

그러므로 사용자가 만든 헤더 파일을 포함시킬 때에는

각진 괄호를 사용하지 말고 큰따옴표를 사용해야 한다.

 

+puls

통합 개발 환경 (Integrated Development Environment, IDE)은

코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 

하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다.

종래의 소프트웨어 개발에서는

컴파일러, 텍스트 편집기, 디버거 등을 따로 사용했다.

이러한 프로그램을 하나로 묶어

대화형 인터페이스를 제공한 것이 통합 개발 환경이다.

최근의 통합 개발 환경(IDE)은 그래픽 사용자 인터페이스(GUI)

응용 프로그램 개발용 고속 도구가 많다.

--

 

통합개발환경에서, 헤더 파일을 프로젝트 리스트에 추가하면 안 된다.

그리고 #include를 사용하여 소스 코드 파일을 다른 소스 콬드 파일에 포함시키면 안 된다.

 

헤더 파일 관리

 

헤더 파일을 어떤 파일에 포함시킬 때에는

단 한 번만 포함시켜야 한다.

헤더 파일을 여러 번 포함시크는 실수를 저지르기 쉬운데,

C와 C++에서는 헤더 파일을 여러 번 포함시키는

실수를 피하기 위해 사용하는 표준 기법이 있다.

전처리 지시자 #ifdef(if not defined를 의미한다)를 사용하는 것이다.

 

#include COORDIN_H_
. . .
#endif

 

'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글

OBB 충돌  (0) 2023.04.06
생성자를 통한 자동 형변환, 변환 함수  (0) 2023.03.02
L-Value R-Value  (0) 2023.02.20
C++ 파일 입출력  (0) 2023.02.11
vector 와 array  (0) 2023.02.08