2011-03-03 17 views
18

प्रीप्रोसेसर निर्देश #if और सामान्य ifसी में अंतर क्या है? मैं सी पर नया हूं।प्रीप्रोसेसर निर्देश #if और सामान्य के बीच अंतर

+0

क्या आप पूछ रहे हैं कि प्रीप्रोसेसर क्या करता है? क्या आप पूछ रहे हैं कि यह कैसे काम करता है? आप वास्तव में क्या पूछ रहे हो –

+0

मैं जानना चाहता हूं कि प्रीप्रोसेसर कैसे करता है !!! – kevin

+1

कृपया चिल्लाओ मत, और कृपया व्याकरण संबंधी प्रश्न पूछें। मुझे नहीं पता कि "प्रीप्रोसेसर कैसे करता है" का अर्थ है - यह निश्चित रूप से स्पष्ट नहीं है कि एसएलॉट के विकल्पों में से कौन सा पहचान करने के लिए है। –

उत्तर

17

उनके सामने # के साथ वक्तव्य को प्रीप्रोसेसर निर्देश कहा जाता है। कोड वास्तव में संकलित होने से पहले उन्हें एक पार्सर द्वारा संसाधित किया जाता है। से पहले खोज का उपयोग कर मारा गूगल (http://www.cplusplus.com/doc/tutorial/preprocessor/):

प्रीप्रोसेसर निर्देशों लाइनों हमारे कार्यक्रमों है कि कार्यक्रम बयान लेकिन निर्देशों नहीं हैं के कोड में शामिल हैं प्रीप्रोसेसर के लिए। ये रेखाएं हमेशा हैश चिह्न (#) से पहले होती हैं। प्रीप्रोसेसर कोड शुरू होने के वास्तविक संकलन से पहले निष्पादित किया जाता है, इसलिए प्रीप्रोसेसर बयान द्वारा उत्पन्न किए जाने से पहले इन सभी निर्देशों को पचता है।

तो एक #if संकलन समय पर तय किया जाएगा, अगर "सामान्य" रन टाइम पर तय किया जाएगा। दूसरे शब्दों में,

#define TEST 1 
#if TEST 
printf("%d", TEST); 
#endif 

इसके बजाय यदि आपने लिखा

#define TEST 1 
if(TEST) 
printf("%d", TEST); 

रूप

printf("%d", 1); 

संकलन होगा कार्यक्रम वास्तव में मैक्रो के लिए प्रीप्रोसेसर निर्देश चेकों के रूप में

if(1) 
printf("%d", 1); 
+0

ताकि हम जो कुछ भी चाहते हैं उसका उपयोग कर सकें? – kevin

+0

@kevin संख्या विशेष रूप से 'पूर्णांक एक्स = 1; #if एक्स == 1' बिल्कुल काम नहीं करता है। –

4

प्रीप्रोसेसर if आपको संकलक को भेजे जाने से पहले कोड को हालत देने की अनुमति देता है। आमतौर पर हेडर कोड को दो बार जोड़ने से रोकने के लिए प्रयोग किया जाता है।

संपादित करें, क्या आपका मतलब सी ++ है, क्योंकि इसे इस तरह टैग किया गया था? http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

+0

दो बार जोड़े जाने से हेडर कोड को रोकना प्रीप्रोसेसर का बहुत ही सीमित और यहां तक ​​कि गूढ़ उपयोग है ... शायद ही कभी "सामान्य"। –

+0

@ जिम बाल्टर मूल प्रश्न के आधार पर, केविन और अन्य लोगों को इन उत्तरों को ढूंढने की संभावना है, संभवत: कोड में हेडर गार्ड के रूप में कोड में देखा गया ... – Zak

+0

उस दावे के लिए कोई आधार नहीं है। वास्तव में, यह मूल प्रश्न से बेहद असंभव है। –

3

प्रीप्रोसेसर को प्रोग्राम में पहले चरण के रूप में प्रीप्रोसेसर द्वारा संभाला जाता है। प्रोग्राम को निष्पादित होने पर रनटाइम पर सामान्य किया जाता है। प्रीप्रोसेसर निर्देश का प्रयोग विभिन्न परिभाषित प्रीप्रोसेसर स्थिरांक/अभिव्यक्तियों के आधार पर कोड के विभिन्न वर्गों का उपयोग करके सशर्त संकलन को सक्षम करने के लिए किया जाता है। सामान्य अगर निष्पादन कार्यक्रम में प्रवाह को नियंत्रित करने के लिए प्रयोग किया जाता है।

-1

संकलन होगा या ओ में थर्म शब्द, # परिभाषित निर्देश और परिभाषा को परिभाषित करता है यदि इसे परिभाषित किया गया है। इसलिए केवल मैक्रो चर की जांच की जाती है। यह प्रीप्रोकैसिंग चरण के दौरान किया जाता है।

सामान्य या नियंत्रण प्रवाह टोकन यदि चर या फ़ंक्शन रिटर्न मानों के साथ किसी शर्त के लिए जांच करता है। यह जांच निष्पादन के दौरान की जाती है।