2010-08-10 6 views
0

포함시킬 STL 헤더 파일을 설명하는 구성 파일을 제공해야합니다. 나는 보통 많은 HAVE_XXX_HEADER 매크로를 정의함으로써이 작업을 수행한다는 것을 알았다. 명시 적으로 헤더 이름을 매크로에 제공하는 데 문제가 있는지 궁금합니다. 그리고 대신 각 변형 시험의 :매크로로 정의 된 헤더 파일 포함하기

#if defined(HAVE_TR1_UNORDERED_MAP_HEADER) 
#include <tr1/unordered_map> 
#elseif (...) 
#endif 

을 간단히 할 수 : 헤더 이름은 하드 구성 파일 내부 코드되지 않기 때문에뿐만 아니라, 유연성을 제공

#define UNORDERED_MAP_HEADER <tr1/unordered_map> 
(...) 
#include UNORDERED_MAP_HEADER 

.

답변

2

이 C99 가능하고 법적, CF ISO 9899 : 1999 §6.10.2 예 2. 유사한 예는 또한 (draft) C++ standard에서 찾을 수 있습니다, 내가하고 시도 8.

0

16.2 총알 :

#define BBB <stdlib.h> 
#include BBB 

그리고 MSVS 2005를 사용하여 문제없이 컴파일됩니다. 무엇이 문제입니까?

+3

문제는 특정 컴파일러에서 작동하는 것이 모든 표준 호환 컴파일러에서 작동한다는 것을 의미하지는 않습니다. – GManNickG

4

물론 가능합니다. 함수 매크로를 사용할 수도 있습니다. 예를 들어, 나는 때문에 GCC 장소 TR1 헤더 하위 디렉토리에 내 프로젝트에 이것을 사용 : 나는 GCC와 MSVC에서이를 테스트 한

#ifdef __GNUC__ 
# define TR1_HEADER(header) <tr1/header> 
#else 
# define TR1_HEADER(header) <header> 
#endif 

#include TR1_HEADER(unordered_map) 
#include TR1_HEADER(memory) 
#include TR1_HEADER(functional) 
// etc. 

#undef TR1_HEADER 

이 특별한 경우 GCC는 아니지만 2008 년 다른 컴파일러는 다른 해킹을 요구할 수있다 MSVC가 적용되는 동안 엄격하게 준수하므로 으로 작동해야합니다.

관련 문제