C++/Syntax
2021. 3. 9. 19:19
헤더 가드 (Header Guard)
#include guard
internal include guard : 헤더파일 내부에서 매크로를 검사하는 것
header.h
#ifndef HEADER_H # define HEADER_H ... #endif
external include guard : 헤더파일을 외부에서
include
할 때 매크로를 검사하는 것main.cpp
#ifndef HEADER_H #include "header.h" #endif
장점
- 컴파일러에 의존하지 않는다.
단점
한 번 읽은 헤더 파일도 내용을 읽어야 해서 컴파일 속도가 느릴 수 있다.
- 귀찮지만 external include guard를 적용하면 해결 가능하다.
매크로 이름이 충돌할 가능성 존재한다.
대규모 프로젝트에선 명명 규칙을 정해서 사용한다.
ex)
_MODULE_HEADER_H_
gcc에서는 이를 #pragma once와 비슷하게 처리하는 기능을 추가했다고 한다. (Include Guard Optimization)
참고
#pragma once
#pragma once
장점
한 번 읽은 헤더 파일은 따로 기억하여 읽지 않는다. -> 빠르다.
MS, gcc 등에서 예전부터 지원했다.
단점
전처리기에서 버그가 있거나, 파일 시스템 상에서 동일성을 파악하지 못하면(소프트 링크 등) 중복으로 포함할 가능성 존재한다.
컴파일러마다 지원 여부가 다르기 때문에 일단은 비표준이다.
'C++ > Syntax' 카테고리의 다른 글
C++ 소수점 (Decimal Point) (0) | 2021.03.09 |
---|---|
C++ 자료형 (Data Type) (0) | 2021.03.09 |
C++ 전처리기 (Preprocessor) (0) | 2021.03.09 |
C++ Namespace (0) | 2021.03.09 |
C++ 초기화 (Initialization) (0) | 2021.03.09 |