我想用
#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")
也是如此。有没有办法对YES
和NO
进行检查? (检查替换值)
更新:似乎允许>
和== 0
,例如
#if IS_APP_FULL_VERSION == 0
因此我们实际上可以将0
和1
用于false和true,并使用== 1
进行测试,但如果YES
和{{1}会更好可以使用。
更新2:
一种可能的解决方案是:
NO
一切正常,我们只需将#define IS_APP_FULL_VERSION 1
#if IS_APP_FULL_VERSION
// add some methods here
#endif
isAppFullVersion = IS_APP_FULL_VERSION;
更改为1
即可切换代码。
答案 0 :(得分:1)
我认为,你是一些困惑的比较MACRO。
#define
格式正在关注它。
#define MACRO_NAME VALUE
(VALUE
空格也很好。MACRO_NAME
需要的是。)
如果你想比较编译时跟它一样。这是比较仅表示defined
与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");
}
答案 1 :(得分: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
答案 2 :(得分:0)
您的基本问题是宏处理器#if语句只有一种数据类型 - 整数。所有#if表达式都以整数形式计算,未定义的符号将替换为零。无法计算字符串表达式(包括比较)。