2011-01-03 10 views
7

मुझे प्रतीकात्मक और शाब्दिक स्थिरांक की परिभाषा और उपयोग के साथ पकड़ने में परेशानी हो रही है और मैं सोच रहा था कि क्या आप उन्हें समझा सकते हैं और उनके मतभेदों को उजागर कर सकते हैं। धन्यवाद!सी में शाब्दिक और प्रतीकात्मक स्थिरांक की अंतर और परिभाषा?

उत्तर

3

एक प्रतीक ऐसा कुछ है जो संकलक से संबंधित है। कंपाइलर const का इलाज करता है जिस तरह से यह एक चर का इलाज करता है। दूसरी तरफ, #define कुछ ऐसा है जो संकलक को इसके बारे में भी पता नहीं है, क्योंकि प्रीकंपलर इसे अपने मूल्य में बदल देता है। यह खोज-और-प्रतिस्थापन की तरह है। precompiler

b += 5; 

में तब्दील हो आप

#define A 5 

और फिर

b += A; 

करते हैं और सभी संकलक देखता संख्या 5

0

मुझे लगता है कि आपका क्या मतलब है कि एक शाब्दिक स्थिरता "स्ट्रिंग" या 2 या झूठी जैसी एक प्राचीन अभिव्यक्ति है, जबकि एक प्रतीकात्मक व्यक्ति तब होता है जब आप इसे नाम देते हैं, जैसे const int MagicNumber = 42. दोनों का उपयोग किया जा सकता है अभिव्यक्ति के रूप में, लेकिन आप बाद वाले को किसी नाम से संदर्भित कर सकते हैं। उपयोगी यदि आप कई स्थानों से एक ही स्थिरता का उपयोग करते हैं।

+1

सी में (और प्रश्न टैग किया गया है), 'const int' ऑब्जेक्ट स्थिर नहीं है। सी में एक नामित निरंतर (एक प्रतीकात्मक स्थिरांक) उत्पन्न करने के लिए या तो '# परिभाषित' या enums का उपयोग करना होगा। – AnT

+0

हाहा, क्षमा करें, मैंने सोचा कि मैं सी # प्रश्न ब्राउज़ कर रहा था :) – fejesjoco

3

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

int tempInt = 10;

tempInt प्रकार int का एक चर है; 10 एक शाब्दिक स्थिर है। आप 10 को मान असाइन नहीं कर सकते हैं, और इसका मान बदला नहीं जा सकता है। एक प्रतीकात्मक निरंतर एक स्थिर होता है जिसे किसी नाम से दर्शाया जाता है, जैसे एक चर का प्रतिनिधित्व किया जाता है। एक चर के विपरीत, हालांकि, निरंतर प्रारंभ होने के बाद, इसका मान बदला नहीं जा सकता है।

अपने कार्यक्रम एक पूर्णांक चर नामित छात्रों और एक अन्य नामित वर्ग हैं, तो आप की गणना कर सकता है कि कितने छात्रों, वर्गों में से एक ज्ञात संख्या को देखते हुए, यदि आप पता था कि वर्ग प्रति 15 छात्रों थे:

छात्रों = कक्षाएं * 15;

0

(पिछली पोस्ट से उधार) एक शाब्दिक स्थिरता आपके प्रोग्राम में सीधे टाइप किए जाने वाले मूल्य को कहीं भी आवश्यक है। उदाहरण के लिए

int breakpoint = 10; 

परिवर्तनीय ब्रेकपॉइंट एक पूर्णांक (int) है; 10 एक शाब्दिक स्थिर है। आप 10 को मान असाइन नहीं कर सकते हैं, और इसका मान बदला नहीं जा सकता है। एक चर के विपरीत, एक मान (प्रारंभिक) असाइन किए जाने के बाद स्थिर को बदला नहीं जा सकता है।

एक प्रतीक ऐसा कुछ है जो संकलक से संबंधित है। इस उदाहरण में, टेन # डेफिन फ़ंक्शन का उपयोग करके बनाई गई प्रतीकात्मक स्थिरता है। एक # परिभाषा कुछ ऐसा है जो संकलक को भी पता नहीं है, क्योंकि प्रीकंपलर इसे अपने निर्दिष्ट (परिभाषित) मान में बदल देता है। प्रीकंपलर आपके प्रोग्राम के अंदर स्थिरता के साथ प्रत्येक प्रतीक को खोजता है और प्रतिस्थापित करता है।

#define TEN 10  /* These two lines of code become one... */ 
breakpoint += TEN; /* after running through the precompiler */ 

precompiler

Breakpoint += 10; 

संकलक कभी नहीं देखता टेन लेकिन केवल उसको दिए गए मूल्य में तब्दील, 10 क्यों उपयोगी है?क्या होगा यदि ब्रेकपॉइंट 11 में बदल दिया गया है। पूरे कार्यक्रम को देखने और प्रत्येक वैरिएबल परिभाषा को नए मूल्य में बदलने के बजाय, जो एक शाब्दिक स्थिरांक का उपयोग करके सेट किया गया था, 10, एकल प्रतीक निरंतर परिभाषा को बदलें ... 11 से 11 और प्रीकंपलर को आपके लिए बदलाव करने दें।

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