2011-03-19 5 views
0

헤더 나 기호가없는 경우 정상적으로 성능이 저하 될 수있는 방법을 찾고 있습니다. 내 안전 파일 고려 :C 심볼과 헤더를 안전하게 사용 하시겠습니까?

#import "FooHeader.h" 

// override some method that needs a symbol from FooHeader 
-(id)myImplementation:(FooSymbol)aSymbol 
{ 
... 
} 

내가하고 싶은 것은 가져 오기를 시도하기 전에 FooHeader.h의 존재를 확인하는 것입니다. 다음으로, 헤더가 존재하지 않는다면 FooSymbol이라는 심볼도 사용할 수 없으므로 그 메소드를 컴파일하려고하지 않을 것입니다. 다음과 같은 것 :

#if HEADER_EXISTS(FooHeader) 
#import "FooHeader.h" 
#endif 

// override some method that needs a symbol from FooHeader 
#if SYMBOL_EXISTS(FooSymbol) 
-(id)myImplementation:(FooSymbol)aSymbol 
{ 
... 
} 
#endif 

그런 메커니즘이 가능한지 누구에게 알 수 있습니까? 이상적으로 이것은 C/C++/Objective-C 환경에서 작동합니다.

감사

+3

을하지만, C와 C++에서 적어도 이것은 나에게별로 의미가 없지만, 이것이 유용 할 수있는 시나리오의 예제를 줄 수 있습니까? –

답변

5

이 일반적으로 autoconf를 함께 이루어집니다. configure.ac이라는 파일을 만듭니다. configure.ac에서 AC_CHECK_HEADER ([FooHeader.h], ...)를 추가합니다.

프로젝트에서 ./configure를 실행하면 Makefile CFLAGS는 -DHAVE_FooHeader 정의를 갖게됩니다. #ifdef와 HAVE_FooHeader.

나는 편리한 예를 가지고 있지 않지만, 온라인 autotools를 튜토리얼에서 자동 구성 또는보고에 대한 정보 페이지를 확인 제안했다. 내가 목표 - C에 대해 말할 수

관련 문제