반응형
헤더 가드(header guard)라는 메커니즘을 통해 중복 정의를 막을 수 있다. 같은 변수와 함수를 한 번더 정의하는것.
이 문제는 헤더가드로 해결할 수 있다. 헤더 가드는 조건부 컴파일 지시자를 사용한다.
#ifndef SOME_UNIQUE_NAME_HERE
#define SOME_UNIQUE_NAME_HERE // 선언과 정의
#endif
위 헤더 파일이 포함(include)되면 SOME_UNIQUE_NAME_HERE가 정의되었는지 확인한다. 헤더 파일을 처음 include하면 SSOME_UNIQUE_NAME_HERE는 정의되어 있지 않다. 그러므로 SOME_UNIQUE_NAME_HERE를 정의하고 헤더 파일의 내용을 include한다. 그러나 이전에 헤더 파일을 include 했다면 SOME_UNIQUE_NAME_HERE는 이미 정의되어 있기 때문에 헤더 파일 내용이 무시된다.
모든 헤더 파일에는 헤더 가드가 있어야 한다. SOME_UNIQUE_NAME_HERE은 일반적으로 _H가 붙은 헤더 파일의 이름을 사용한다.
#pragma once
현재 많은 최신 컴파일러는 #pragma 지시자를 이용한 단순한 헤더 가드를 지원한다.
#pragma once
#pragma once는 헤더 가드와 같은 기능을 하며, 짧다는 게 장점이다.
그러나 C++ 언어의 공식적인 부분이 아니므로 모든 컴파일러가 지원하는 것은 아니다. 호환성을 위해 헤더 가드를 사용하는 것이 좋다.
반응형
'개발자 > C++(Linux, Window)' 카테고리의 다른 글
[C/C++] EXTERN "C" (0) | 2020.09.28 |
---|---|
Intel MKL 사용하여 행렬곱 계산 속도 개선하기(퍼옴) (0) | 2020.08.28 |
Dynamic Array, L-value R-value (0) | 2020.08.17 |
Vector Container 메모리 관리 관련 (0) | 2020.08.17 |
모듈별 프로그래밍 , 정적/동적 라이브러리 (0) | 2020.08.14 |