Подтвердить что ты не робот

Какая разница между макросами препроцессора #if и #ifdef Objective-C?

Как определить макросы препроцессора в настройках сборки, такие как IPAD_BUILD и IPHONE_BUILD (и как их использовать в моих методах factory)?

Я использую это наизусть сейчас, было бы здорово узнать, что происходит.

4b9b3361

Ответ 1

/# если работает как обычно, если:

#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

Ответ 2

Макросом может быть undefined, его можно определить без значения или его можно определить с некоторым значением, возможно, числом. Примеры:

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

#ifdef MACRO или #if (MACRO) проверяет, определен ли макрос, с или без значения.

#if MACRO заменяет определение макроса; если макрос не определен, он заменяет 0. Затем он вычисляет выражение, которое он находит. Если мы возьмем пять приведенных выше примеров, #if MACRO будет преобразован в

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

Число 2 и 3 дают ошибку времени компиляции. Число 1 и 4 оцениваются как false, поэтому следующий код пропускается. Число 5 соответствует true.

#if более гибкий: вы можете написать

#if MACRO == 2

который будет компилировать только следующий код, если макрос был определен, например, как

#define MACRO 2