2014-01-08 6 views
6

나는 항상 #include을/#define Include-Guard 뒤에 두었다. 이제 IDE (Qt Creator)의 리팩터링 메커니즘이 Include-Guard 앞에 넣습니다.#include 앞에 # ifdef/# define Include-Guard는 괜찮습니까?

#include "AnotherHeader.h" 

#ifndef MYHEADER_H 
#define MYHEADER_H 

이로 인해 문제가 발생할 수 있습니까? 아니면 그대로 둘 수 있습니까?

+0

"AnotherHeader.h"안에 경비원이 포함되어 있는지 확인하십시오. –

+2

이 질문은 qt 태그와 관련이 없으므로 제거하는 것 같습니다. – lpapp

+1

이 코드를 컴파일하더라도 모든 코드 판독기가 왜 경비원 앞에 파일을 포함 시킬지 궁금해 할 것입니다. 팀에서 공통적 인 코드 인 경우에만 이러한 코드를 사용해야합니다. – hansmaad

답변

5

문제의 헤더에 경비원이 포함되어 있으면 문제가 발생하지 않습니다. 포함 경비원 안에 넣으면 편집 속도가 빨라질 수 있습니다. 컴파일러에서 볼 수없는 무언가는 오류가 발생하지 않아도 컴파일 시간이 적게 걸립니다.

+0

IIRC, GCC는 헤더 가드 패턴을 탐지하고 추가 중복 포함을 제외합니다. 그러나 OP가 한 것처럼 뭔가를하면 컴파일 속도 향상을 무효화 할 수 있습니다. –

0

간단히 체크 아웃하십시오. 두 개의 다른 헤더가 MyHeader.h을 사용한다고 가정 해 보겠습니다.

  1. AnotherHeader.h
  2. 가드가 헤더 파일의 나머지를로드 할 수 있습니다 포함 무조건적으로 포함되어 있습니다.

다음 시간 :

  1. AnotherHeader.h가 무조건 다시
  2. 포함되어 있습니다 가드 헤더 파일의 나머지를로드하는 것을 방지 포함합니다.

AnotherHeader.h이 포함 된 경우 아무런 문제가 발생하지 않습니다. 하지만 일반적으로 파일 상단에 포함 가드를 넣었습니다. 이미로드되었을 때 AnotherHeader.h을 다시로드 할 필요가 없습니다.

0

덜 일반적이지만, 이것은 받아 들일 수있는 것으로 간주됩니다. 그러나 원형 #include이 있으면 일반적으로 포함 항목이 최대 포함 깊이에 도달 할 때까지 미리 파서가 불평 할 때까지 포함됩니다.). 이것은 포함 경비원 후에 #include의 경우 발생하지 않습니다.

합니다 (#include로 확실하지 않습니다 '어떤 경우에도 좋은 스타일로 간주되지 않지만, 그것은 그럼에도 불구하고 사용하는 경우, 그것은 #include 작동 할 수의'는이 경비를 포함 이후의 하지만 원형 #include)

+0

그래서 include guard의 외부에 두는 것이 좋습니다. 그런 식으로 순환적인 #include를 만들 수 있는지 알 수 있습니다. – YoYoYonnY