33

बिल्ड सेटिंग्स में प्रीप्रोसेसर मैक्रोज़ को परिभाषित करने के लिए कैसे करें, जैसे IPAD_BUILD, और IPHONE_BUILD (और मेरे फैक्ट्री विधियों में उनका उपयोग कैसे करें)?#if और #ifdef उद्देश्य-सी प्रीप्रोसेसर मैक्रो के बीच क्या अंतर है?

मैं अब दिल से इनका उपयोग कर रहा हूं, यह जानकर अच्छा होगा कि पीछे क्या हो रहा है।

उत्तर

44

/# अगर के रूप में काम करता है सामान्य है, तो:

#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

परीक्षण करने के लिए है कि क्या आप आईपैड चल रहे हैं या आप इस तरह ख़ाली नहीं होना चाहिए:

#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 
+0

धन्यवाद उदाहरण के लिए परिभाषित किया गया था लिख ​​सकते हैं। यह सुनिश्चित करने के लिए: क्या # परिभाषित करने के लिए पर्याप्त IPAD_BUILD परिभाषित किया गया है (बिना किसी मान के?) #ifdef IPAD_BUILD इस मामले में सच होगा? – Geri

+0

हाँ लगता है ._____ – Geri

+0

वास्तव में नहीं =) मैं जवाब बदल दूंगा। – Stas

9

मैक्रो अपरिभाषित जा सकता है, यह कोई मूल्य नहीं के साथ परिभाषित किया जा सकता , या इसे कुछ मूल्य, संभवतः एक संख्या के साथ परिभाषित किया जा सकता है। उदाहरण:

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

#ifdef मैक्रो या परिभाषित (मैक्रो) चेकों मैक्रो के साथ और महत्वहीन, परिभाषित किया गया है कि क्या #if।

#if मैक्रो मैक्रो परिभाषा को प्रतिस्थापित करता है; यदि मैक्रो परिभाषित नहीं किया गया है तो यह 0 को प्रतिस्थापित करता है। फिर यह उस अभिव्यक्ति का मूल्यांकन करता है जो इसे मिलता है। हम पांच उपरोक्त उदाहरण लेते हैं, मैक्रो #if

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

संख्या 2 और 3 में बदल दिया जाएगा एक संकलन समय त्रुटि दिखा सकते हैं। संख्या 1 और 4 गलत का मूल्यांकन करते हैं, इसलिए निम्न कोड छोड़ दिया गया है। संख्या 5 सही करने के लिए मूल्यांकन करता है।

#if अधिक लचीला है: आप

#if MACRO == 2 

जो केवल निम्नलिखित कोड संकलन होगा यदि मैक्रो के रूप में

#define MACRO 2