1

我想用

#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"). 有没有办法对照YESand来检查它NO?(检查替代值)


更新:似乎>并且== 0是允许的,例如

#if IS_APP_FULL_VERSION == 0

所以我们实际上可以用0and1来判断真假,用and== 1来测试,但是如果YESandNO能用就更好了。


更新 2:

一种可能的解决方案是:

#define IS_APP_FULL_VERSION  1

#if IS_APP_FULL_VERSION

// add some methods here

#endif

isAppFullVersion = IS_APP_FULL_VERSION;

一切正常,我们可以更改10切换代码。

4

3 回答 3

1

您的基本问题是宏处理器#if 语句只有一种数据类型——整数。所有#if 表达式都以整数计算,未定义的符号被替换为零。无法评估字符串表达式(包括比较)。

于 2012-08-17T02:35:45.747 回答
0

实际上,通常情况下,我只会使用标志宏而不是值 1,因为这里只有两种情况:

#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
于 2012-08-17T02:00:20.693 回答
0

我想,你是一些混淆比较宏。

#define格式如下。

#define MACRO_NAME VALUEVALUE是空格也可以。MACRO_NAME需要的是。)

如果你想比较编译时间,喜欢它。这只是比较平均值definedvs no defined。不是YESvsNO

#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");
}
于 2012-08-17T02:05:39.993 回答