Objective-C如何根据字符串比较结果定义宏

时间:2014-10-01 13:32:22

标签: ios objective-c c-preprocessor

我想根据字符串比较结果定义一个宏。我试过的方式不起作用。

#define APP_BUNDLE_IDENTIFIER    [[NSBundle mainBundle] bundleIdentifier]
#define APP_EXTENSION_BUNDLE_IDENTIFIER  @"abcded"
#define RESULT strcmp(APP_BUNDLE_IDENTIFIER, APP_EXTENSION_BUNDLE_IDENTIFIER)
#if $RESULT == 1
        #define TARGET_IS_EXTENSION
#endif

基本上我试图基于已定义的宏来实现我的应用程序将区分本机应用程序和应用程序扩展。

2 个答案:

答案 0 :(得分:2)

此代码的基本问题是在编译代码时评估#define#if,而在代码时评估Objective-C方法调用和strcmp等C函数被执行。这意味着你不能以这种方式有条件#define,因为代码不会被执行到以后。

第二个问题是您无法将strcmpNSString一起使用。您需要使用NSString方法。

可能可以构建一个可以进行所需比较的宏,但使用C函数会更简单。

答案 1 :(得分:0)

#if RESULT

不是肯定的,看着其余部分会让人感到非常困惑。 #define只是进行字符串替换,所以RESULT将成为strcmp没有意义,因为strcmp是一个运行时函数而不是预处理器函数所以你怎么能有#if strcmp .....