더북(TheBook)

따라서 파일의 내용은 포함 방지를 아직 정의하지 않은 경우에만 포함한다. 코드 안에서 더 이상 포함하지 않도록 포함 방지를 정의한다.

모든 매크로와 마찬가지로 프로젝트의 이름뿐만 아니라 직접 또는 간접적으로 포함하는 다른 모든 헤더의 이름도 고유해야 한다. 이상적으로 이름은 프로젝트와 파일 이름을 나타내야 한다. 또한, 프로젝트와 관련된 경로 또는 네임스페이스(3.2.1절)도 포함할 수 있다. 일반적으로 끝에 _INCLUDE 또는 _HEADER를 붙인다. 포함 방지를 실수로 재사용하면 여러 가지 다양한 오류 메시지가 출력될 수 있다. 경험에 따르면 오류 메시지가 발생하는 악의 근원을 발견하는 데 오랜 시간이 걸릴 수 있다. 고급 개발자는 앞서 언급한 정보나 난수 생성기를 사용해 자동으로 생성한다.

편리하게 사용할 수 있는 대안으로는 #pragma once가 있다. 이전 예제를 단순화하면 다음과 같이 된다.

// 작성자: 나
// 라이선스: 읽을 때마다 100달러 지불
#pragma once
#include <cmath>
double sine(double x);
...

이 pragma는 표준이 아니지만 주요 컴파일러들이 모두 지원한다. pragma를 사용하면 이중 포함을 피하는 동작이 컴파일러의 책임이 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.