728x90
헤더와 소스
C++ 프로젝트에서는 다음과 같이 헤더와 소스가 분리된 모습을 볼 수 있다.
// Vector.h
#ifndef VECTOR_H
#define VECTOR_H
class Vector {
private:
double x, y;
public:
Vector(double x, double y);
double length() const;
};
#endif
// Vector.cpp
#include "Vector.h"
#include <cmath>
Vector::Vector(double x, double y) : x(x), y(y) {}
double Vector::length() const {
return std::sqrt(x * x + y * y);
}
C++에서는 헤더 파일과 소스 파일을 따로 분리하는 것이 일반적이며 역할도 다르다.
- 헤더: 선언(Declaration)을 포함한다. 선언은 함수와 클래스에 대한 존재 자체를 알려주는 것이다.
- 소스: 정의(Definition)을 포함한다. 선언된 것들의 실제 동작을 구현한다.
여러 헤더를 쓰다보면 기반이 되는 헤더가 겹치는 경우가 있는데, 헤더를 중복 정의함으로써 생기는 에러를 방지하기 위한 방법이 두 가지 존재한다.
Include Guard
Include Guard는 같은 헤더가 두 번 이상 include 되는 걸 방지한다.
Vector.h에서 다음과 같이 되어있는 걸 볼 수 있다.
// Vector.h
#ifndef VECTOR_H // VECTOR_H가 선언되어있지 않다면
#define VECTOR_H // VECTOR_H를 선언함
#endif
이는 VECTOR_H 매크로가 없을 경우에만 VECTOR_H 매크로를 정의하는 것으로 이해할 수 있다.
#pragma once
Include Guard 대신 요즘 쓰는 표기로 이해할 수 있다.
심지어 한 줄이면 끝난다.
#pragma once
728x90