기본 썸네일 이미지

헤더 중복 방지 #pragma once 와 Include Guard 차이

2024. 5. 20. 13:15·DEV/C++

 

일반적으로 헤더파일의 중복 포함을 방지하기 위한 방법으로

1. #pragma once 와 2. include Guard 의 2가지 방법을 사용하며 큰 결과물(헤더가 중복 컴파일 되지 않음)은 동일하다.

 

하지만 세부적으로 구현 및 동작에 차이가 있고 각 상황마다 권장되는 방식이 다르기 때문에 차이점을 알고 구분해서 사용하는것이 좋다.

1. #pragma once

  •  구현
  •  Header 파일 최상단에 위치함.( Include 선언 전에)
  •  Visual Studio 에서 자체 생성되는 Class 의 헤더 파일에 자동으로 추가되는 형태.  
#pragma once

// 헤더 파일 내용
class CustomClass {
    // 클래스 정의
};
  •  특장점 
  1. 코드의 간결함: 한 줄로 중복 포함 방지를 설정해서 코드가 간결해짐.
  2. 빠른 컴파일: 대부분의 컴파일러에서 #pragma once는 빠른 파일 포함 검사를 수행할 수 있어 컴파일 시간이 단축
  3. 중복 방지동작의 편리함: 동일한 파일을 여러 경로로 포함하더라도 이를 자동으로 감지하여 중복 방지 함.
  4. 구버전과의 이식성 이슈: 구버전 컴파일러를 사용할 경우 인식되지 않을 수 있음.

 

2. Include Guard

  • 구현
  • 매크로를 사용하여 중복 포함 방지 
#ifndef CUSTOMCLASS_H
#define CUSTOMCLASS_H

// 헤더 파일 내용
class CustomClass {
    // 클래스 정의
};

#endif //CUSTOMCLASS_H

 

  • 특장점
  1. 이식성 높음: 모든 표준 C/C++ 컴파일러에서 지원. 상대적으로 #pragma once는 표준이 아니므로 일부 오래된 컴파일러에서 미지원 되는 가능성도 있다.
  2. 코드적 명시적: 파일이 어디에서 시작되고 끝나는지 명확하게 확인 가능.
  3. 높은 코드 복잡성: #pragma once 에 비해 비교적 코드가 길어지며, 고유한 매크로 이름을 사용해야함.
    만약 동일한 이름의 매크로가 다른 헤더 파일에서 사용될 경우 충돌할 수 있음.

3. 결론

  • Include Guard 의 경우는 코드 이식성이 중요한경우
    -예를 들어 어떤 컴파일러에도 대응해야 하는 오픈소스와 같은 경우-
    에 사용
  • 그외의 모든 경우는#pragma once 를 사용 하는게 더 좋다.
저작자표시 비영리 변경금지 (새창열림)

'DEV > C++' 카테고리의 다른 글

순환 종속(Circular Dependency) 와 전방 선언(Forward Declaration)  (0) 2025.02.26
JAN(Bar)Code 생성 QT Sample Source  (0) 2023.11.02
[MFC] Static Control 배경 투명화  (0) 2021.07.07
[MFC]Dialog UPDATE_COMMAND_UI 안먹는 문제  (0) 2021.07.05
[MFC] CheckBox, RadioButton 체크 옵션  (0) 2021.07.05
'DEV/C++' 카테고리의 다른 글
  • 순환 종속(Circular Dependency) 와 전방 선언(Forward Declaration)
  • JAN(Bar)Code 생성 QT Sample Source
  • [MFC] Static Control 배경 투명화
  • [MFC]Dialog UPDATE_COMMAND_UI 안먹는 문제
retire
retire
    반응형
  • retire
    NeedRetire
    retire
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • DEV (21)
        • C++ (9)
        • Jenkins (6)
        • Socket (4)
        • NSIS (2)
      • PC Tips (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Static Control
    헤더중복방지
    monitorinfoview
    c4430
    build step
    VIProductVersion
    c2238
    VIAddVersionKey
    #pragma once
    c++
    순환 종속
    버전 설정
    c2143
    MFC
    include guard
    jenkins 설치
    NSIS 함수
    모니터인치
    NSIS
    JAN code
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
retire
헤더 중복 방지 #pragma once 와 Include Guard 차이
상단으로

티스토리툴바