首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在objective c++中使用预处理器

如何在objective c++中使用预处理器
EN

Stack Overflow用户
提问于 2013-10-01 14:21:48
回答 3查看 359关注 0票数 0

嗨,在我的一个应用程序中,我必须支持IOS6和IOS7的应用程序。为了实现这一点,我必须知道当前的设备版本。为此,我定义了一个宏,并尝试使用该宏作为参考来完成我的任务。我写的代码如下所示。

在.h文件中,我将IPhoneOSVersion定义为50000。

此代码位于.m文件中

代码语言:javascript
运行
复制
if([[[UIDevice currentDevice] systemVersion] isEqualToString:@"7.0"])
    {

      #undef IPhoneOSVersion
      #define IPhoneOSVersion 70000

        NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);
    }
    else 
    {

          #undef IPhoneOSVersion
          #define IPhoneOSVersion 60000

        NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);
    }

NSLog(@"_IPHONE_OS_VERSION_MIN_REQUIRED after is %d",IPhoneOSVersion);

如果我在IOS7中运行这段代码。在控制台中,数据必须在is 70000之后像这样打印_IPHONE_OS_VERSION_MIN_REQUIRED,但不幸的是,我在is 60000之后得到了_IPHONE_OS_VERSION_MIN_REQUIRED。甚至我在else条件下也设置了一个断点,但是它没有执行,但是宏值是changing.Can,任何人,请让我知道为什么宏值会发生这样的变化。

EN

回答 3

Stack Overflow用户

发布于 2013-10-01 14:33:06

你不应该针对操作系统版本进行硬编码,Apple推荐的支持多个操作系统版本的方法是检查某些特定的类、API、协议或函数,这允许更大的灵活性,因为其中一些东西有时是向后兼容的。

这里有一个相当不错的教程,介绍了如何在代码http://www.raywenderlich.com/42591/supporting-multiple-ios-versions-and-devices和苹果https://developer.apple.com/library/ios/documentation/developertools/conceptual/cross_development/Using/using.html的文档中检查特定资源的存在

编辑:为了回答为什么要修改宏的问题,编译器会遍历if-else的两个分支,从而使用宏的最后一个声明。你不能使用这样的宏并在运行时改变它,宏是在编译之前定义的。

票数 1
EN

Stack Overflow用户

发布于 2014-03-06 17:23:53

在Objective-C中使用预处理器的方式与在C或C++中完全相同。预处理器不关心if/else语句。它看到一个序列#undef,#define,#undef,#define,并一个接一个地执行它们,所以在最后一行中,最后一个#define生效。你不能用运行时发生的任何事情来影响这些#定义。

总是有三个操作系统版本在起作用:部署目标(即允许应用程序运行的最低操作系统版本)、SDK版本和运行时的实际版本。您在Xcode中设置的前两个版本;实际版本显然不受您的控制,除非您知道它与部署目标相同或高于部署目标。

SDK =部署目标__IPHONE_OS_VERSION_MAX_ALLOWED = __IPHONE_OS_VERSION_MIN_REQUIRED版本

票数 0
EN

Stack Overflow用户

发布于 2013-10-01 14:36:48

尝试使用

代码语言:javascript
运行
复制
if([[[UIDevice currentDevice] systemVersion] floatValue] == 7.0)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19109351

复制
相关文章

相似问题

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