static double m = 30000;
double foo(double x, double y) {
return x/m + y;
}
यह आपको कुछ भी नहीं जीतता है। गणना करने के लिए एम की एक प्रति बनाना है। इसके अलावा, अगर आप ऐसा करेंगे:
double bar(double x, double y) {
m += x + y;
return m;
}
तब सभी बार मीटर बदल जाएगा कहता है। फ़ंक्शंस (या कक्षाएं) के बाहर स्टेटिक चर वास्तव में फ़ाइल स्कोप के साथ वैश्विक चर हैं। अन्य फाइलें बाहरी
फ़ंक्शन के अंदर स्थिर चर अभी भी वैश्विक चर की तरह हैं, सिवाय इसके कि एक ही फ़ाइल में अन्य फ़ंक्शंस उन्हें सीधे नहीं देख सकते हैं।
const double m = 30000;
यह बेहतर है और कई मामलों में सबसे अच्छा है। यदि कंपाइलर इस ग्लोबल कॉन्स को देखता है और फिर एम के संदर्भ को देखता है तो यह जानता है कि किसी भी रजिस्टर या स्टैक स्थिति में जहां से कहीं भी वैल्यू लोड करने के लिए कोड उत्पन्न करने के बजाय कोड को उत्पन्न करने के बजाय (जिसे संभवतः पहले एक रजिस्टर में एक शाब्दिक पता लोड करना आवश्यक है) गणना करने के लिए यह केवल 30000 हो सकता है या कभी-कभी वहां 30000 एन्कोडेड अधिकार के साथ एक निर्देश उत्पन्न कर सकता है।
नीचे की तरफ यह है कि संकलक को यह मानना है कि अन्य सॉस फ़ाइलें एम को पढ़ना चाहती हैं और वास्तव में ऑब्जेक्ट फ़ाइल में एक प्रतिलिपि (लेकिन स्थिर चर) के रूप में एक प्रतिलिपि को स्टोर करना पड़ता है।
मुझे यकीन नहीं है कि यह मानक है लेकिन आप कभी-कभी extern const double m = 30000;
कर सकते हैं और संकलक 30000 का उपयोग ऑप्टिमाइज़ करने के लिए करेंगे और मान लें कि एक और फ़ाइल में वास्तव में एम की प्रति है जो निष्पादन योग्य में संग्रहीत की जाएगी। आप static const double m = 30000;
भी कर सकते हैं और संकलक यह मान सकता है कि कोई भी उम्मीद नहीं करेगा कि एम की एक प्रति इस स्रोत फ़ाइल से उत्पन्न ऑब्जेक्ट कोड में संग्रहीत की जाती है।
#define m 30000
कर अधिक जोखिम भरा है। यदि आपको एक चर, स्थिर, या फ़ंक्शन के रूप में घोषित किया गया था तो आपको चेतावनी या त्रुटि नहीं मिलेगी। इसके अलावा, इस तरह के प्रीप्रोसेसर मैक्रोज़ के लिए गड़बड़ करना आसान है। उदाहरण के लिए:
#define BASE_ADDRESS 48
#define MY_OFFSET 9
#define MY_ADDRESS BASE_ADDRESS+MY_OFFSET
...
return MY_ADDRESS*4;
हाँ, यह एक बेवकूफ उदाहरण है, लेकिन क्या इस के बाद पूर्वप्रक्रमक यह के साथ किया जाता है की तरह लग रहा
...
return 48+9*4;
कौन सा
return 48+(9*4);
और वह है है जो आप शायद चाहते थे नहीं।
मैक्रोज़ खराब होने पर एक और जगह है जब आपके पास तारों जैसे बड़े स्थिरांक होते हैं। स्ट्रिंग्स की आवश्यकता होती है कि वे सूचक द्वारा संबोधित किए जा सकें और पूर्णांक और फ़्लोटिंग पॉइंट शाब्दिक या निरंतर संख्याओं से दूर ऑप्टिमाइज़ करना अधिक कठिन हो। क्योंकि संकलक देखने के लिए कि क्या तुम सच में केवल तार "की जरूरत में सक्षम नहीं हो सकता है
#define JIM "Jim"
#define JOHN "John"
और फिर सभी अपने कार्यक्रमों के ऊपर जिम और जॉन का इस्तेमाल किया: आप आसानी से एक बहुत बड़े कार्यक्रम बना सकता है अगर आप की तरह सामान की बहुत सारी था जोम "और" जॉन "कार्यक्रम में एक बार।
ऐसा कहा जा रहा है कि स्थिरांक को इस तरह घोषित करने के लिए असामान्य नहीं है, और अक्सर वे लोग जो जानते हैं कि वे क्या कर रहे हैं, ठीक से ऐसा किया जाता है।
दिलचस्प उत्तरों के लिए सभी को धन्यवाद। तो मुझे लगता है कि मेरे मामले में सबसे अच्छी चीज स्थिर कॉन्स डबल = 30000 है। – yCalleecharan