2012-08-17 60 views
1

我想使用在Objective-C中,如何测试宏定义值?

#define IS_APP_FULL_VERSION NO 

和代码

isAppFullVersion = IS_APP_FULL_VERSION; 

设置实例变量。但是,有没有办法也做

#if IS_APP_FULL_VERSION == "NO" 

// add some methods here 

#endif 

但它会给出一个编译错误,所以是#if (IS_APP_FULL_VERSION == "NO")。有没有办法根据YESNO来检查它? (核对替代值)


更新:好像>== 0是允许的,如

#if IS_APP_FULL_VERSION == 0 

,所以我们实际上可以使用01虚假和真实的,请使用== 1进行测试,但如果可以使用YESNO,则会更好。


更新2:

一个可能的解决方案被证明是:

#define IS_APP_FULL_VERSION 1 

#if IS_APP_FULL_VERSION 

// add some methods here 

#endif 

isAppFullVersion = IS_APP_FULL_VERSION; 

将所有的工作,我们可以只改变10切换的代码。

+0

这里有两个问题:1)“NO”的值为零,并且在测试变量的值之前会发生替换。 2)没有宏功能来评估表达式' == '。 – 2012-08-17 02:14:05

回答

0

其实,通常情况下,我只想用一个标志宏,而不是价值之一,因为这里有只有两种情况:

#define APP_IS_FULL_VERSION 

无论是定义或不定义宏。然后,如果以后要包含/排除基于这些代码,你可以使用:

#ifdef APP_IS_FULL_VERSION 
    // Do something 
#endif 

(或#ifndef了相反的情况,很明显)。

的代码段,它的使用来选择正确的代码的一个简单的问题:

#ifdef APP_IS_FULL_VERSION 
    isAppFullVersion = YES; 
#else 
    isAppFullVersion = NO; 
#endif 
+0

'NO'是objective-c中定义的符号(它表示错误) – borrrden 2012-08-17 02:05:52

1

我想,你是有些糊涂比较MACRO。

#define其格式如下。

#define MACRO_NAME VALUEVALUE是空白空间也不错。MACRO_NAME需要的是。)

,如果你想下面好像比较编译时间。这只是比较意味着只有defined vs no defined。不YES VS NO

#define IS_APP_FULL_VERSION 1 

#if defined IS_APP_FULL_VERSION 
    NSLog(@"full-verison"); 
#endif 

#define IS_APP_FULL_VERSION blahblah 

#if defined IS_APP_FULL_VERSION 
     NSLog(@"full-verison"); 
#endif 

如果你想建立的独立版本。请参考下面的内容。

#define IS_APP_FREE_VERSION 

#if defined IS_APP_FREE_VERSION 
    NSLog(@"free-version"); 
#endif 

#define IS_APP_FULL_VERSION 

#if defined IS_APP_FULL_VERISON 
    NSLog(@"full-version"); 
#endif 


,如果你想跟随喜欢对比运行。这通常是比较。

#define IS_APP_FULL_VERSION 1  

if(IS_APP_FULL_VERSION) 
{ 
    NSLog(@"full-verison"); 
} 

#define IS_APP_FULL_VERSION 0  

if(!IS_APP_FULL_VERSION) 
{ 
    NSLog(@"no full-version"); 
} 
0

您的基本问题是,#如果声明宏处理器只有一种数据类型 - 整数。所有#if表达式都用整数进行求值,未定义的符号被替换为零。字符串表达式(包括比较)无法评估。