C++ 헤더가드 (Header Guard)

2021. 3. 9. 19:19·C++/Syntax

헤더 가드 (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)

  • 참고

    • 고수들이 절대 가르쳐 주지 않는 C/C++ 프로그래밍 팁

    • 스택 오버플로우 - Internal vs External Include Guards


#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
'C++/Syntax' 카테고리의 다른 글
  • C++ 자료형 (Data Type)
  • C++ 전처리기 (Preprocessor)
  • C++ Namespace
  • C++ 초기화 (Initialization)
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 분류 전체보기 (316)
      • Algorithm (13)
        • 알기 쉬운 알고리즘 (10)
        • Search (1)
        • Sort (2)
      • Arduino (0)
      • C++ (185)
        • Class (46)
        • Exception (6)
        • Library (51)
        • Overloading (10)
        • SmartPointer (5)
        • Syntax (33)
        • TBC++ (23)
        • Templates (9)
        • VisualStudio (2)
      • Embedded (1)
      • Git (4)
      • Java (5)
      • Linux (16)
        • Error (1)
        • Linux Structure (11)
      • MacOS (7)
      • OS (1)
        • Concurrency (1)
      • Python (21)
        • Class (1)
        • Function (2)
        • Syntax (17)
      • Raspberrypi (9)
      • Review (1)
      • Utility (12)
        • VSCode (5)
        • VirtualBox (3)
      • Web (8)
        • Nginx (1)
        • React (3)
        • Django (1)
      • Windows (19)
        • Registry (3)
        • WSL (1)
        • DeviceDriver (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Windows 11
    KakaoTalk
    맥북 카카오톡 알림 안뜸
    윈도우
    java
    윈도우 명령어
    스프링 프레임워크 핵심 기술
    unix
    SFC
    MacOS
    spring
    시스템 복구
    windows
    dism
    알림
    Solaris 10
    백기선
    citrix workspace
    제외
    mspaint
    로지텍 마우스 제스처
    Workspace
    그림판
    vscode
    logi options
    EXCLUDE
    스프링
    SunOS 5.1
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 헤더가드 (Header Guard)
상단으로

티스토리툴바