본문 바로가기

Unreal/팁

#pragma once(수정필요)

오늘 회사에서 #pragma once때문에 컴파일 에러로 난리가 났어서 정리하는 글

 

 

난리가 났던 이유

1. 파일 A는 #pragma once 전처리기와 함께 파일B를 include 하고 있었음

2. (추정) 파일A를 간접적으로 참조하는 파일 C에서도 파일B를 include 

3. (추정) #pragma once가 파일A의 include B를 날려버림

4. 컴파일에러가 났지만 비주얼스튜디오는 파일A가 아닌 파일B의 변수D를 원인으로 지목함

(파일A 전혀 지목X)

 

한 시간 정도... svn 업뎃 받은 모두는 아무 일도 할 수 없었다.

include를 전방선언으로 바꿔주니까 문제 해결!

 

Pragma once

docs.microsoft.com/en-us/cpp/preprocessor/once?view=msvc-160

(한국어버전은 너무 발번역)

 

once pragma

Learn more about: once pragma

docs.microsoft.com

en.wikipedia.org/wiki/Pragma_once

 

pragma once - Wikipedia

Preprocessor directive in C and C++ In the C and C++ programming languages, pragma once is a non-standard but widely supported preprocessor directive designed to cause the current source file to be included only once in a single compilation.[1] Thus, #prag

en.wikipedia.org

- 소스 코드 파일을 컴파일할 때 컴파일러에서 헤더 파일을 한 번만 포함 하도록 지정 합니다

- 주어진 컴파일에서 한 번만 정의될 수 있게 후속 포함을 무시한다.

- "multiple-include optimization". 

- templates, 타입, 함수, object들이 코드에 한 개 이하로만 존재하도록 제한합니당

- 전처리기 기호

- high level 메커니즘이라서 컴파일 속도가 향상됨(#ifndef - #endif)에 비해

 

- 동일한 파일이 다른 디렉토리에서 다른 이름으로 발견될 수 있다(심볼릭링크, 하드링크) ????이게뭐지

- #include guard 라는 메크로로 방지할 수 있다는 것 같은데