安全地使用C符号和标题?

时间:2011-03-19 00:36:27

标签: c++ objective-c c header symbols

我正在寻找一种在没有标题或符号的情况下优雅降级的方法。考虑我的安全文件:

#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环境。

由于

1 个答案:

答案 0 :(得分:5)

这通常使用autoconf完成。您创建一个名为configure.ac的文件。在configure.ac中,添加AC_CHECK_HEADER([FooHeader.h],....

当您在项目上运行./configure时,Makefile CFLAGS将获得-DHAVE_FooHeader定义。在C文件中使用#ifdef HAVE_FooHeader。

我没有方便的示例,但建议检查autoconfig上的信息页面或在线查看autotools教程。