web-dev-qa-db-fra.com

Quelle est la différence entre la macro de préprocesseur Objectif-C #if et #ifdef?

Comment définir les macros de préprocesseur dans les paramètres de construction, comme IPAD_BUILD et IPHONE_BUILD (et comment les utiliser dans mes méthodes d'usine)?

Je les utilise par cœur maintenant, ce serait cool de savoir ce qui se passe.

38
Geri

/ # si fonctionne comme d'habitude si:

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

/ # ifdef signifie "si défini - une valeur ou des macros":

#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

ou:

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

Utilisez ce lien pour plus d'informations http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives

Pour tester si vous utilisez iPad ou non, vous devriez avoir un smth comme ceci:

#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

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

Voici une autre fonction de préprocesseur utile:

#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
51
Stas

Une macro peut être indéfinie, elle peut être définie sans valeur, ou elle peut être définie avec une certaine valeur, éventuellement un nombre. Exemples:

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

#ifdef MACRO ou #if defined (MACRO) vérifie si la macro est définie, avec ou sans valeur.

#si MACRO remplace la définition de macro; si la macro n'est pas définie, elle remplace 0. Elle évalue alors l'expression qu'elle trouve. Si nous prenons les cinq exemples ci-dessus, # si MACRO sera transformé en

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

Les numéros 2 et 3 donnent une erreur de temps de compilation. Les nombres 1 et 4 ont la valeur false, donc le code suivant est ignoré. Le numéro 5 est évalué comme vrai.

#if est plus flexible: vous pouvez écrire

#if MACRO == 2

qui ne compilera le code suivant que si la macro a été définie par exemple comme

#define MACRO 2
11
gnasher729