2011-03-19 34 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

我不能爲Objective-C的說話,但至少在C和C++中,這對我來說並沒有多大意義,你能否舉一個例子來說明這會有用嗎? – 2011-03-19 00:42:16

回答

5

這通常使用autoconf完成。您創建一個名爲configure.ac的文件。在你的configure.ac文件中添加AC_CHECK_HEADER([FooHeader.h],....

當你在項目上運行./configure時,Makefile CFLAGS會得到一個-DHAVE_FooHeader的定義。 #ifdef來HAVE_FooHeader。

我沒有一個例子方便,但會建議檢查上自動配置或尋找的信息在網頁上線一個自動工具教程。