首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宏条件编译不起作用

宏条件编译不起作用
EN

Stack Overflow用户
提问于 2016-04-12 08:06:38
回答 1查看 291关注 0票数 0

我正在以下列方式检查iOS版本

代码语言:javascript
运行
复制
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

现在,我想在此基础上编译一个类。

代码语言:javascript
运行
复制
#if defined SYSTEM_VERSION_LESS_THAN(@"9.0")
    #import "SomeClassBelowiOS9.h"
#else
    #import "SomeClassIniOS9AndAbove.h"
#endif

我得到一个错误,令牌不是预处理器子表达式中的有效二进制运算符。

编辑:

它是这样工作的,但我不确定这是否是一个好的解决方案,基本思想是以一种更简单的方式重用一个宏。

代码语言:javascript
运行
复制
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define belowiOS9 SYSTEM_VERSION_LESS_THAN(@"9.0")

#if belowiOS9
    #import "SomeClassBelowiOS9.h"
#else
    #import "SomeClassIniOS9AndAbove.h"
#endif
EN

回答 1

Stack Overflow用户

发布于 2016-04-12 08:25:52

Objective预处理器不是编译器的一部分,而是编译过程中的一个单独步骤。简单地说,Objective预处理器只是一个文本替换工具,它指示编译器在实际编译之前进行所需的预处理。

也许你是在一条线上出错,这是预处理条件.

代码语言:javascript
运行
复制
#if defined SYSTEM_VERSION_LESS_THAN(@"9.0")

#if需要在编译时进行评估.但[[UIDevice currentDevice] systemVersion]只是在运行时才有价值。这就是为什么编译器不能编译这一行。

就像@trojacfoe说的,试试#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36567190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档