전통적으로 C ++에 여러 헤더가 포함되는 것을 피하는 표준 및 이식 가능한 방법은 매크로 가드 체계#ifndef - #define - #endif
라고도 하는 프리 컴파일러 지시문 체계 를 사용하는 것입니다 (아래 코드 조각 참조).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
그러나 대부분의 구현 / 컴파일러 (아래 그림 참조)에는라는 매크로 보호 체계와 동일한 목적을 수행하는보다 "우아한"대안이 있습니다 #pragma once
. #pragma once
코드 보호, 이름 충돌 방지, 때로는 컴파일 속도 향상을 포함하여 매크로 가드 체계와 비교하여 몇 가지 장점이 있습니다.
몇 가지 연구를 통해 #pragma once
지시문이 거의 모든 알려진 컴파일러에서 지원 되지만 지시문이 #pragma once
C ++ 11 표준의 일부 인지 여부에 대한 혼돈이 있음을 깨달았습니다 .
질문 :
#pragma once
지시문이 C ++ 11 표준의 일부 인지 여부를 누군가가 명확히 할 수 있습니까?- C ++ 11 표준의 일부가 아닌 경우 이후 릴리스 (예 : C ++ 14 이상)에 포함시킬 계획이 있습니까?
- 누군가가 기술 중 하나를 사용할 때의 장점 / 단점에 대해 더 자세히 설명 할 수 있다면 좋을 것입니다 (예 : 매크로 가드 대
#pragma once
).
#pragma once
일반적으로 작동하지 않는 상황이 있습니다.