43

如何在构建设置中定义预处理器宏,例如 IPAD_BUILD 和 IPHONE_BUILD(以及如何在我的工厂方法中使用它们)?

我现在正在使用这些,知道后面发生了什么会很酷。

4

2 回答 2

56

/#if 在以下情况下照常工作:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}

/#ifdef 表示“如果已定义 - 某些值或宏”:

#ifdef    RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) _RKL_CONCAT(x, RKL_APPEND_TO_ICU_FUNCTIONS)
#else  // RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) x
#endif // RKL_APPEND_TO_ICU_FUNCTIONS

或者:

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
#endif

使用此链接获取更多信息 http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

要测试你是否运行 iPad,你应该有这样的东西:

#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

if (USING_IPAD) {
    NSLog(@"running iPad");
}

这是另一个有用的预处理器函数:

#ifdef DEBUG
    //here we run application through xcode (either simulator or device). You usually place some test code here (e.g. hardcoded login-passwords)
#else
    //this is a real application downloaded from appStore
#endif
于 2012-10-08T13:05:25.623 回答
12

一个宏可以是未定义的,它可以定义为没有值,或者它可以定义为某个值,可能是一个数字。例子:

#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1

#ifdef MACRO 或#if defined (MACRO) 检查宏是否已定义,有或没有值。

#if MACRO 替换宏定义;如果未定义宏,则将其替换为 0。然后计算它找到的表达式。如果我们用上面的五个例子,#if MACRO 会变成

#if 0
#if
#if ??????
#if 0
#if 1

2 号和 3 号给出编译时错误。数字 1 和 4 评估为 false,因此跳过以下代码。数字 5 评估为真。

#if 更灵活:你可以写

#if MACRO == 2

如果宏被定义为例如,它将仅编译以下代码

#define MACRO 2
于 2014-03-06T09:30:03.490 回答