2017-03-23 9 views
7

आज जब मैं एक सी प्रोग्राम विकसित कर रहा था, तो मेरा एक कॉलेज ने इंगित किया कि मैं कुछ गलत कर रहा था।सी में क्या आप एक स्थिर निरंतर आधार पर निरंतर परिभाषित कर सकते हैं?

उन्होंने कहा कि कोड जो मैं कर रहा था जो नीचे दिए गए कोड के समान है, गलत है, और आप किसी अन्य स्थिरता के आधार पर निरंतर परिभाषित नहीं कर सकते हैं। कार्यक्रम वैसे भी काम कर रहा है, और मैं सोच रहा था कि क्या वह सही था। क्या नीचे दिया गया कोड गलत है/सर्वोत्तम प्रथाओं को तोड़ देता है?

const int num=5; 
const int num2=num*2; 
+0

आपका कोड [संकलित नहीं करता] (https://ideone.com/9GamL7)। –

+0

मेरी राय में, 'num = 5' पहले से ही एक खराब अभ्यास है। तो यदि आप एक * अच्छा अभ्यास * प्रोग्रामर बनना चाहते हैं, तो 'const int num = 5' लिखें। इसके अलावा, आपने कोड को संकलित क्यों नहीं किया और त्रुटि संदेश की व्याख्या क्यों की? –

+1

फ़ाइल दायरे में यह अवैध है। – BLUEPIXY

उत्तर

8

ये स्थिरांक नहीं हैं; वे क्वालीफायर के साथ int चर हैं। const क्वालीफायर का अर्थ है कि चर द्वारा प्रोग्राम को लिखा नहीं जा सकता है। वास्तविक पूर्णांक स्थिर अभिव्यक्तियों के उदाहरणों में 5, 2 + 3, और sizeof(int) शामिल हैं। Here is a full list

फ़ाइल दायरे पर दूसरी पंक्ति एक बाधा उल्लंघन है, क्योंकि चर का नाम निरंतर अभिव्यक्ति नहीं है।

सभी एक वस्तु स्थिर या धागा भंडारण अवधि निरंतर भाव या स्ट्रिंग शाब्दिक होगा है के लिए एक प्रारंभकर्ता में भाव: बाधा C11 6.7.9/4 है।

(फ़ाइल स्कोप पर घोषित चर स्थिर या थ्रेड स्टोरेज अवधि है)।

ब्लॉक दायरे पर कोड ठीक है, क्योंकि प्रारंभकर्ताओं को निरंतर अभिव्यक्तियों की आवश्यकता नहीं होती है।

3

सी में इस लक्ष्य को हासिल करने के लिए (जैसा कि आप शायद जानते हैं) बढ़िया तरीका लिखना है

#define NUM 5 
#define NUM2 (NUM*2) 

वहाँ अभिव्यक्ति के आसपास कोष्ठक, लेकिन लाइनों के अंत में कोई अर्धविराम हैं, क्योंकि पूर्वप्रक्रमक फैलता सरल लेक्सिकल प्रतिस्थापन के रूप में मैक्रोज़। तो, अभिव्यक्ति 20/NUM220/(5*2) तक विस्तारित होगी। ब्रांड्स के बिना, यह 20/5*2 होता, जो गलत है।

संयोग से, सी ++ में, आप जिस व्यवहार को चाहते हैं उसे प्राप्त करने के लिए आप constexpr का उपयोग कर सकते हैं; constexpr वैरिएबल का उपयोग स्थिर प्रारंभकर्ता या टेम्पलेट पैरामीटर में किया जा सकता है।

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