2011-04-04 8 views
6

कई से बचने के लिए एक हेडर फाइल का भी शामिल है, मेरे दोस्त से एक निम्नलिखित तरीकेएक बार या #ifndef #endif का उपयोग करने के लिए कौन सा कुशल है?

#ifndef _INTERFACEMESSAGE_HPP 
    #define _INTERFACEMESSAGE_HPP 
    class CInterfaceMessage 
    { 
    //Declaration of class goes here 
    //i.e declaration of member variables and methods 
    private: 
    int m_nCount; 
    CString m_cStrMessage; 
    public: 
    CString foo(int); 
} 
    #endif 

जहां _INTERFACEMESSAGE_HPP बस एक पहचानकर्ता

है सुझाव दिया लेकिन जब मैं दृश्य स्टूडियो का उपयोग 2005 IDE एक वर्ग की घोषणा मैं एक मिल #pragma के रूप में बयान एक बार वर्ग परिभाषा के शुरू में जब मैं एक बार #pragma के प्रयोजन को खोजने के लिए MSDN की मदद ली यह मुझे निम्नलिखित विवरण दिया

"निर्दिष्ट करता है कि एक स्रोत कोड फ़ाइल संकलित करते समय फ़ाइल को संकलक द्वारा केवल एक बार (खोला जाएगा) शामिल किया जाएगा। "

किसी कृपया ?, के रूप में पदावनत। बताओ जो सही दृष्टिकोण है अगर दोनों सही तो क्या अंतर है कर रहे हैं? है एक दृष्टिकोण अन्य की तुलना में बेहतर है?

+1

अंडरस्कोर के साथ शुरू होने वाले पहचानकर्ताओं का उपयोग न करें, इसके बाद वे आरक्षित हैं। – CesarB

उत्तर

6

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

+8

जीसीसी 3.4 के बाद से अब बहिष्कृत नहीं है, http://gcc.gnu.org/gcc-3.4/changes.html देखें – CesarB

2

पहले दृष्टिकोण सामान्य दृष्टिकोण है कि सभी compilers के साथ काम करता है और यह भी पुराने एक के आसपास है। The #pragma once दृष्टिकोण कंपाइलर विशिष्ट है।

4

प्रगतियां हैं कंपाइलर-विशिष्ट, इसलिए मैं #ifndef का उपयोग करूंगा।

प्रीप्रोसेसर निर्देश संकल्प (वास्तव में, पहले) संकलन के दौरान हल किए जाते हैं, इसलिए वे संकलन समय के लिए रनटाइम में कोई फर्क नहीं पड़ता है।

हालांकि, आप इन दो विकल्पों से संकलित समय में कोई अंतर नहीं देखेंगे जबतक कि आप उन्हें कई हज़ार बार अनुमान लगाते हैं।

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