2012-01-26 3 views
4

때때로 C++에서 포함 순서가 중요합니다.링크 오류를 피하기 위해 #includes의 순서

1 .- 오른쪽 방법 :

#include <windows.h>    // Header File For Windows 
#include <gl\glu.h>     // Header File For The GLu32 Library 

2 .- 잘못된 방법 :이 일부 단지 일어날

#include <gl\glu.h>     // Header File For The GLu32 Library 
#include <windows.h>    // Header File For Windows 

는 않음을 사용하여 OpenGL을의 경우입니다 특정 헤더 또는 일종의 임의의 문제를 사전에 방지하기가 어렵습니까?

그런 경우 :

나는 포함의 올바른 순서 알 수있는 방법

?

+4

이것은 _linking_와는 아무런 관련이 없으며 컴파일 만합니다. –

+0

@ JoachimPileborg : 꼭 그런 것은 아닙니다. 하나의 매크로가 다른 함수 프로토 타입을 변경하여 나중에 확인할 수없는 외부 요소가 발생할 수 있습니다. –

답변

4
  1. 일부 특정 헤더. 어떤 사람들은 그것을 설계상의 결함이라고 부를지도 모른다.
  2. 할 수 없습니다. 오류 메시지를보고 조심스럽게 정렬하십시오. 창문에, 먼저 windows.h를 두는 것은 좋은 생각 일 것입니다.
2

C++ 표준 라이브러리에 포함 된 순서는 중요하지 않습니다.
다른 라이브러리의 경우 일반적으로 중요하지 않습니다 (특별히 명시하지 않는 한).
특정 플랫폼의 경우 중요 할 수 있으며 일반적으로 명확하게 지정됩니다. 예를 들어

: 모든 다른 포함하기 전에 Windows #include <windows.h>

온다. 또한

하는 MSVC입니다 ++ 특정 헤더를 미리 컴파일 된 헤더를 사용하는 경우 다른 모든 전에 포함되어야
#include <stdafx.h>
.

+0

그 이유는 무엇입니까? –

+0

'stdafx.h'는 Visual Studio 마법사에서 생성 된 난센스입니다. 미리 컴파일 된 헤더를 사용하려면'precompiled.h' 또는'common.h' 또는 현명한 의미로 사용하십시오. 그리고 꺽쇠 괄호는'stdafx.h '와 같은 프로젝트 - 로컬 헤더와 함께 사용되면 안됩니다. –

2

Windows의 경우 먼저 #include <windows.h>이 필요합니다.

그런 다음 헤더 파일에서 #include을 피하십시오. 대신 전달 선언을 사용하십시오.

하나의 헤더 파일 만 변경하면 컴파일 시간을 절약 할 수 있습니다.

2

잘 알려진 C 프로그래머 중 상당수는 머리글에 다른 머리글을 포함해서는 안된다는 사실을 알고 있습니다. 사용자가 올바른 순서로 올바른 머리글을 포함시켜야 제대로 작동합니다. 이것은 너무 많은 헤더를 포함하지 않는 소규모 프로젝트에서 효과가 있었으며 (그리고 계속해서) 작동합니다.

그러나 더 큰 프로젝트의 경우, 모든 헤더 종속성을 추적하는 것은 많은 현대 코드 기반에서 거의 다루기가 어렵다. 최신 헤더에는 대부분 다른 헤더가 포함됩니다.

불행히도, 우리는 종종 두 가지가 다소 혼란 스럽기까지합니다.당신이 포함해야 할 헤더와 순서를 찾는 것만으로도 당신이 할 수있는 일은 많지 않습니다.

관련 문제