स्थिरांक को परिभाषित करने के लिए, अधिक आम और सही तरीका क्या है? #define के साथ स्थिरांक परिभाषित करने के संकलन, लिंकिंग इत्यादि के मामले में लागत क्या है? यह एक और तरीका महंगा है?#define की लागत क्या है?
उत्तर
किसी भी स्थिरांक परिभाषित करने के लिए सबसे अच्छा तरीका है लिखने के लिए
const int m = 7;
const float pi = 3.1415926f;
const char x = 'F';
#define
का उपयोग करते हुए एक बुरा C++ शैली है। नामस्थान स्कोप में #define
छिपाना असंभव है।
#define pi 3.1415926
तुलना करें
namespace myscope {
const float pi = 3.1415926f;
}
दूसरा रास्ता साथ स्पष्ट रूप से बेहतर है।
+1 '# परिभाषित' भी खराब शैली है क्योंकि यह कंपाइलर को कोई स्पष्ट प्रकार की जानकारी नहीं देता है। – GrahamS
यह सटीक रूप से स्टाइलिस्ट सिफारिशों को बताता है लेकिन सवाल का जवाब नहीं देता है। उचित सी ++ शैली में घोषित स्थिरांकों की लागत है कि # डिफाइन नहीं है। –
@ डैन ओल्सन: आह लेकिन # डिफाइनों के पास कोड आकार के मामले में भी लागत है, क्योंकि (कंपाइलर स्मारकों के आधार पर) आप कई अक्षरों को शुरू कर सकते हैं जहां एक एकल कॉन्स होता। @Espuz: न तो लागत चिंता करने लायक है (जब तक कि आप बहुत कम स्तर की माइक्रोप्रोसेसर सामग्री नहीं कर रहे हों) तो बेहतर शैली के साथ जाएं, जहां संभव हो वहां 'कॉन्स्ट' है। – GrahamS
लागत केवल प्रीप्रोसेसर के लिए है, जब # परिभाषाएं हल हो जाती हैं (निश्चित रूप से स्थिरता के लिए # परिभाषाओं से भरे एक परियोजना से निपटने की अतिरिक्त डीबगिंग लागत को अनदेखा कर रही हैं)।
#define
स्ट्रिंग प्रतिस्थापन है। तो यदि आप मैक्रोज़ में गलतियां करते हैं, तो वे बाद में त्रुटियों के रूप में दिखाई देंगे। अधिकतर गलत प्रकार या गलत अभिव्यक्ति आम हैं।
सशर्त संकलन के लिए, प्री-प्रोसेसर मैक्रोज़ सबसे अच्छा काम करते हैं। गणना के लिए उपयोग किए जाने वाले अन्य स्थिरांक के लिए, const
अच्छा काम करता है।
#define
मैक्रोज़ प्री-प्रोसेसर द्वारा संसाधित होते हैं, वे संकलक के लिए दृश्यमान नहीं होते हैं। और चूंकि वे एक प्रतीक के रूप में कंपाइलर के लिए दृश्यमान नहीं हैं, इसलिए किसी मैक्रो को शामिल करने में कुछ डीबग करना मुश्किल है।
स्थिरांक को परिभाषित करने का पसंदीदा तरीका उचित प्रकार की जानकारी के साथ कॉन्स कीवर्ड का उपयोग कर रहा है।
const unsigned int ArraySize = 100;
और भी बेहतर
static const unsigned int ArraySize = 100;
जब लगातार केवल एक ही फाइल में प्रयोग किया जाता है।
#define संकलन समय में वृद्धि होगी, लेकिन यह तेजी से निष्पादन में होगा ...
सशर्त संकलन #define मेंआम तौर पर प्रयोग किया जाता है ...
जहां स्थिरांक संख्या के सामान्य गणना में प्रयोग किया जाता है
विकल्प आपकी आवश्यकता पर निर्भर करता है ...
सबसे अच्छा #define का उपयोग करके गति वृद्धि मामूली होगी। यदि संकलक कॉन्स को अनुकूलित करता है तो इसका कोई फायदा नहीं होगा और आप कॉन्स के लाभों को खो देते हैं। – JeremyP
हाँ ... #define सशर्त संकलन में आसान है (क्रॉस प्लेटफॉर्म एप्लिकेशन में ...) यह एकमात्र लाभ है जिसे माना जा सकता है ... –
कंपाइलर स्वयं को #define कभी नहीं देखता है। प्रीप्रोसेसर कंपाइलर को पारित होने से पहले सभी मैक्रोज़ फैलाता है। साइड इफेक्ट्स में से एक यह है कि मान दोहराए जाते हैं ... और दो समान स्ट्रिंग्स एक ही स्ट्रिंग की जरूरी नहीं हैं। यदि आप
#define SOME_STRING "Just an example"
संकलक के लिए यह स्ट्रिंग की एक प्रति जोड़ने के लिए यह पूरी तरह से कानूनी है जब भी यह स्ट्रिंग को देखता है। एक अच्छा कंपाइलर शायद डुप्लिकेट अक्षर को खत्म कर देगा, लेकिन यह अतिरिक्त काम है जो इसे करना है। यदि आप इसके बजाय एक कॉन्स का उपयोग करते हैं, तो कंपाइलर को इसके बारे में चिंता करने की ज़रूरत नहीं है।
CPU समय वास्तव में #define या macros का उपयोग करने की लागत नहीं है। एक डेवलपर के रूप "लागत" इस प्रकार है:
- यदि आपके मैक्रो में कोई त्रुटि है, संकलक यह है जहाँ आप मैक्रो संदर्भित, नहीं, जहां आप इसे परिभाषित झंडा होगा।
- आप अपने मैक्रो के लिए टाइप सुरक्षा और स्कोपिंग खो देंगे।
- डीबगिंग उपकरण मैक्रो के मूल्य को नहीं जान पाएंगे।
ये चीजें CPU चक्रों को जला नहीं सकती हैं, लेकिन वे डेवलपर चक्र जला सकते हैं।
स्थिरांक के लिए, const
चर घोषित करना बेहतर है, और छोटे प्रकार के स्वतंत्र कार्यों के लिए, इनलाइन फ़ंक्शंस और टेम्पलेट बेहतर हैं।
- 1. मेमोरी एक्सेस की लागत क्या है?
- 2. खाली वेक्टर की ओवरहेड लागत क्या है?
- 3. .NET प्रतिबिंब की "लागत" क्या है?
- 4. क्या गेटटर की शून्य लागत है?
- 5. तुल्यकालन की लागत
- 6. #define
- 7. #define
- 8. मल्टीप्रोसेसर सिस्टम में अस्थिर कीवर्ड की लागत क्या है?
- 9. लागत/एक String.indexof() फ़ंक्शन कॉल की जटिलता क्या है
- 10. अक्का में अभिनेताओं को बनाने की लागत क्या है?
- 11. PHP में "शामिल" की प्रदर्शन लागत क्या है?
- 12. एंड्रॉइड मार्केटप्लेस में प्रवेश/सदस्यता की लागत क्या है?
- 13. Thread.isInterrupted() को कॉल करने की प्रदर्शन लागत क्या है?
- 14. स्कैला के आलसी मूल्य की (छिपी हुई) लागत क्या है?
- 15. क्या कोई ऐसा बिंदु है जहां रिफैक्टरिंग की लागत फिर से लिखने की लागत से अधिक है?
- 16. प्रकार तुलना की प्रदर्शन लागत
- 17. बिंग मानचित्रों की लागत पैसे?
- 18. लापता होने की लागत इकाई
- 19. स्थानीय स्टोरेज की गति/लागत
- 20. विकास लागत बनाम रखरखाव लागत
- 21. ब्लॉक नेस्टेड लूप की लागत की गणना
- 22. कृपया #define
- 23. #pragma #define
- 24. सी ++ #define
- 25. #define बयान
- 26. हेरोोकू यातायात लागत क्या हैं?
- 27. क्या #define के अंदर # परिभाषित करने का कोई तरीका है?
- 28. प्रदर्शन आज़माएं/कैच ब्लॉक की लागत
- 29. एसक्यूएल स्क्रिप्ट्स - क्या #define के बराबर मौजूद है?
- 30. एक दृश्य C++ प्रोजेक्ट में #define _WIN32_DCOM क्या है?
कोई भाषा, कोई भाषा चुनें? –
@ केली: टैग देखें। – Cam
सी # स्थिरांक को परिभाषित करने के लिए '# परिभाषित' का उपयोग करने की अनुमति नहीं देता है। आप 'DEBUG परिभाषित कर सकते हैं, लेकिन' DEBUG 1' परिभाषित नहीं करें। http://msdn.microsoft.com/en-us/library/yt3yck0x.aspx –