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