2011-08-10 18 views
7

परिभाषित करें क्या कोई मुझे C# में परिभाषित करने के तरीके के बारे में कुछ उदाहरण दे सकता है?कृपया #define

#define //preprocessor directive 

इसका उद्देश्य क्या है? यहाँ Microsoft से उदाहरण मैं अभी भी जो नहीं है:

// preprocessor_if.cs 
#define DEBUG 
#define MYTEST 
using System; 
public class MyClass 
{ 
    static void Main() 
    { 
#if (DEBUG && !MYTEST) 
     Console.WriteLine("DEBUG is defined"); 
#elif (!DEBUG && MYTEST) 
     Console.WriteLine("MYTEST is defined"); 
#elif (DEBUG && MYTEST) 
     Console.WriteLine("DEBUG and MYTEST are defined"); 
#else 
     Console.WriteLine("DEBUG and MYTEST are not defined"); 
#endif 
    } 
} 
+1

पढ़ने के लिए देखभाल http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx – V4Vendetta

+0

# परिभाषित करें (स्रोत फ़ाइल के अंदर) अक्सर उपयोग नहीं किया जाता है। इसके बजाए, उन्हें पर्यावरण/मंच/ढांचे इत्यादि को इंगित करने के लिए संकलन (उदाहरण के लिए एक कंपाइलर स्विच द्वारा) के लिए विश्व स्तर पर परिभाषित किया गया है। #if निर्माण तब आवश्यक विभिन्न कार्यों को करने के लिए उपयोग किया जाता है। उदाहरण के लिए, पूर्ण ढांचे पर कक्षाएं उपलब्ध हैं जो चांदी की रोशनी में उपलब्ध नहीं हैं, इसलिए आपको चांदी के प्रकाश के लिए इमारत के आधार पर एक सशर्त आयात की आवश्यकता हो सकती है या नहीं। –

+0

तो शब्द DEBUG एक कीवर्ड और मनमाना दोनों है? – Rod

उत्तर

4

Quote:

#define और #undef लाइनों एक स्रोत पाठ फ़ाइल के शीर्ष पर दिखाई देनी चाहिए और वे समायोजित कर सकते हैं पूरी फाइल के लिए संकलन विकल्प।

और

सी # भाषा में, #define लाइन एक पूर्व प्रसंस्करण निर्देश माना जाता है। परिभाषित प्रतीकों के लिए कुछ अमान्य वाक्यविन्यास हैं; आप परिभाषित पहचानकर्ता के रूप में एक संख्या मान का उपयोग नहीं कर सकते हैं, उदाहरण के लिए।

और

#undef निर्देश सुनिश्चित करता है कि फ़ाइल में शाब्दिक बिंदु के बाद, निर्दिष्ट पहचानकर्ता परिभाषित नहीं है।

अपने उदाहरण में, यदि DEBUG परिभाषित किया गया है (कोई फर्क नहीं पड़ता कि यह जब तक यह परिभाषित किया गया है) है और MYTEST परिभाषित नहीं है, तो यह संदेश दिखाया दिखाएगा।

अन्यथा, यदि DEBUG परिभाषित नहीं किया गया है लेकिन MYTEST परिभाषित किया गया है, तो यह दिखाया गया संदेश दिखाएगा।

यदि दोनों परिभाषित किए गए हैं तो यह दिखाया गया संदेश दिखाएगा।

नीचे लाइन:

परिभाषित करता है के बिंदु को चुन कर अपने कार्यक्रम यह एक अलग कार्यक्रम प्रवाह देने के लिए करने के लिए संकलन विकल्प लागू है। यह सी और सी ++ से एक कैरियोवर है।

6

"प्रीप्रोसेसर" का अर्थ है कि परिणाम उत्पन्न मुख्य प्रसंस्करण कि संकलक करता से पहले किया जाता है। इसके मुख्य उपयोगों में से एक को संकलित करने से पहले फ़ाइल से कोड को शामिल या बहिष्कृत करना है।

उदाहरण आप देख में, पूर्वप्रक्रमक पहले #define उन दो प्रतीकों, और उसके बाद अलग #if/#elif बयानों का मूल्यांकन यह पता लगाने की जो कोड वास्तव में फ़ाइल में समाप्त करना चाहिए। इस मामले में, दोनों प्रतीकों को परिभाषित किया गया है, इसलिए केवल इतना कहने वाली रेखा को आउटपुट किया जाएगा, और केवल वह कोड संकलित हो जाएगा। यदि आप परिणाम को कम करने के लिए थे, तो आप केवल एकConsole.WriteLine() कथन देखेंगे, और कुछ भी नहीं।

1

#define सी # (यह पुरानी CPP directives से निकला है) कि एक preprocesor प्रतीक को परिभाषित करता है में निर्देश "संकलन से पहले" एक विशेष है।

#if के साथ युग्मित, किस प्रतीक के आधार पर परिभाषित किया गया है, विभिन्न कोड प्रभावी ढंग से पर टिप्पणी की गईं। इस वजह से, गैर-चयनित पथों में कोड को एक संगत राज्य में भी होने की आवश्यकता नहीं है! (सी # इस पूर्व प्रसंस्करण किया जाता है:

उपरोक्त उदाहरण में, प्रतीकों DEBUG और MYTEST शीर्ष (#define के साथ) पर मैन्युअल रूप से परिभाषित कर रहे हैं, इस प्रकार कोड जब यह "सामान्य" संकलन चरण शुरू निम्नलिखित "की तरह दिखता है" संकलक का हिस्सा है और नहीं एक अलग उपकरण है जो पहले से चलाता है।)

// preprocessor_if.cs 
//#define DEBUG 
//#define MYTEST 
using System; 
public class MyClass 
{ 
    static void Main() 
    { 
//#if (DEBUG && !MYTEST) 
     //Console.WriteLine("DEBUG is defined"); 
//#elif (!DEBUG && MYTEST) 
     //Console.WriteLine("MYTEST is defined"); 
//#elif (DEBUG && MYTEST) 
     Console.WriteLine("DEBUG and MYTEST are defined"); 
//#else 
     //Console.WriteLine("DEBUG and MYTEST are not defined"); 
//#endif 
    } 
} 

DEBUG प्रतीक सामान्य रूप से, स्वचालित रूप से सेट है, तो परियोजना डिबगिंग के लिए बनाया जा रहा है और अन्य प्रतीकों परियोजना के हिस्से के रूप में स्थापित किया जा सकता है पर निर्भर करता है अपने आप।

हैप्पी कोडिंग।

0

प्रीप्रोसेसर निर्देश कुछ ऐसा है जिसका संकलन समय पर मूल्यांकन किया जाएगा। # परिभाषित निर्देश एक वैरिएबल घोषित करना है जिसका संकलन समय पर मूल्यांकन किया जा सकता है।

#if (DEBUG && !MYTEST) 
     Console.WriteLine("DEBUG is defined"); 
    #endif 

रेखा से ऊपर है क्योंकि डीबग और MYTEST फ़ाइल के शुरू में परिभाषित किया गया है संकलित नहीं किया जाएगा।

1

प्री-प्रोसेसर निर्देशों के बारे में पढ़ें। मैं सी ++ लिखता हूं इसलिए मैं इसका बिल्कुल उसी तरह उपयोग नहीं करता हूं, लेकिन मूल रूप से ये चीजें हैं जिन्हें आप कथन के निष्पादित करने से पहले परिभाषित करते हैं। आम तौर पर उन्हें 2 तरीकों से इस्तेमाल किया जा सकता है। 1.) पहले फ़ंक्शन चलाने से पहले कुछ परिभाषित करने के लिए, यानी आप अपने मुख्य फ़ंक्शन में चर को कॉल करने से पहले पाई के संख्यात्मक मान को परिभाषित कर सकते हैं। 2.) कार्यक्रम को बताता है कि अपने प्रोग्राम को सही तरीके से निष्पादित करने के लिए क्या लोड करना है।

संबंधित मुद्दे