Search
Duplicate
#️⃣

헤더 중복 방지 기법 세 가지(#pragma once)

간단소개
헤더 중복 방지 기법 세 가지(#pragma once)
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C++
compiler
Scrap
태그
c++
compiler
9 more properties

include guard

기존에는 아래처럼 헤더 중복을 방지했습니다.
#ifndef HEADER_H #define HEADER_H // 내용 #endif
C++
복사
위 내용은 HEADER_H라는 매크로가 정의되어 있지 않다면, HEADER_H 매크로를 정의한다는 내용입니다.
즉, 해당 헤더 파일을 처음 include할 때만 HEADER_H 매크로가 정의되어 있지 않으므로, HEADER_H 매크로를 정의하고 아래 헤더 파일 내용들도 같이 적용될 것입니다.
만약 또 다시 해당 헤더 파일을 include 했다면, 이미 HEADER_H 매크로가 정의되어 있으므로, #ifndef HEADER_H가 false가되어 #endif까지 넘어가게 됩니다.
이런 방식의 include guard는 예전부터 쓰이던 방법이고 모든 컴파일러에서 동작합니다.

#pragma once (추천)

#pragma once 도 include guard와 동일한 역할로 사용됩니다.
#pragma once // 내용
C++
복사
단 한줄로 사용이 가능하며, 헤더 파일의 이름을 사용하여 define할 필요도 없고, 때때로 컴파일 속도도 향상시킵니다.
하지만 #pragma once는 표준이 아니고, 지원하지 않는 컴파일러도 존재합니다.

같이쓰자

#pragma once의 효율성 및 include guard의 호환성을 살리기 위해 같이 쓰이기도 합니다.
#pragma once #ifndef HEADER_H #define HEADER_H // 내용 #endif
C++
복사