【问题标题】:Invalid token at start of a preprocessor expression Xcode [duplicate]预处理器表达式Xcode开头的令牌无效[重复]
【发布时间】:2013-07-03 02:45:27
【问题描述】:
#define A7VERSION() ({[[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue];})

#define IS_OS_7 A7VERSION()>=7

上面的声明似乎编译得很好。

但是,只要我将它添加一个 .m 文件,我就会收到以下异常“预处理器表达式开头的标记无效”。我无法理解我可能错在哪里

@implementation AppViewController
#if IS_OS_7
….
#else
….  
#endif
@end

【问题讨论】:

  • 由于 Objective-C 的动态特性,无法在编译时确定方法调用的值,这意味着您可以做的只是运行时检查。运行时检查的一个很好的列表在这里:stackoverflow.com/questions/3339722/check-iphone-ios-version
  • 这不是一个重复的问题。它与预处理器有关。我的问题标题也没有指定它的版本检查代码。我希望它在运行时工作,这是错误的,并由@bbum 纠正

标签: objective-c xcode c-preprocessor


【解决方案1】:

这个问题与 iOS 7 无关。

您的#define 不会导致可以在编译时解决的问题。 #ifdef 仅在条件是可以在编译时确定的情况下才有效。它不能用于根据应用运行的环境在运行时更改行为。

【讨论】:

  • 它不是#ifdef。这是#if条件
  • @weber67 没关系。它仍然是一个编译时测试,无法在运行时生成动态行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2011-05-16
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2012-06-29
相关资源
最近更新 更多