2012-12-27 16 views
5

अक्सर हेडर में मैंस्थिर ग्लोबल्स घोषित करते समय स्थिर आवश्यक है?

//global namespace, not in class 
static const int my_global =1984; 

देखते हैं लेकिन हाल ही में मुझे पता चला कि स्थिरांक आंतरिक संबंध का अर्थ है, तो मैं नहीं करता है कि स्थिर अनावश्यक बनाने के आश्चर्य?

+0

आप कैसे महसूस करते हैं कि चीजें विरोधाभासी/अनावश्यक हैं? मुझे नहीं लगता कि वे कैसे हैं। "स्थैतिक" घोषणापत्र को आंतरिक लिंक *** *** भी देगा, जो कि है वैसे भी एक अलग बात है। यह अनावश्यक नहीं है: असंबद्ध – sehe

+0

'स्थैतिक' के बिना हर बार हेडर # शामिल होने पर परिवर्तनीय की एक नई परिभाषा होगी। – acraig5075

+0

@ acraig5075 मुझे समझ में नहीं आता है ... हेडर गार्ड सुनिश्चित करते हैं कि qou केवल एक बार शामिल है , भले ही आप अपने कोड में 50x शामिल करें #include – NoSenseEtAl

उत्तर

6

यह निर्भर करता है। सी ++ में, यह अनावश्यक है, लेकिन कुछ लोग (स्वयं शामिल) इसे कहने के आधार पर, हम क्या कह रहे हैं। और निश्चित रूप से, यदि हेडर का उपयोग सी में भी किया जाना है, तो यह आवश्यक है (लेकिन सी में कई प्रयोगों के लिए, आपको #define की आवश्यकता होगी)।

1

सी ++ में, स्थिर लिंक को वैश्विक लिंक को रोकने के लिए अनावश्यक (अनावश्यक) है, क्योंकि यह मानक मानक सी ++ (सी ++ 98, सी ++ 03, सी ++ 11) के लिए करता है। सी में, हालांकि, एक चर के लिए स्थैतिक कीवर्ड आवश्यक है (स्थानीय) लिंकेज। चूंकि कई सी कोडिंग प्रथाओं को आदत से सी ++ में ले जाया गया है (वहां बहुत अधिक ओवरलैप है), कुछ लोग सोचने के बिना इस आदत को ला सकते हैं। मैंने सुना है कि यह तर्क दिया गया है कि गैर-वैश्विक संबंध को इंगित करने के लिए सी ++ में अनावश्यक स्थिर कीवर्ड सी प्रोग्रामर को समझने में मदद करता है।

मैं स्वयं सी ++ मुहावरे के साथ सी ++ में प्रोग्रामिंग की सटीकता को प्राथमिकता देता हूं, ताकि हम सी ++ में सी कोड को कायम न करें, जिससे सूक्ष्म त्रुटियां हो सकती हैं, या कम से कम अपशिष्ट और अनावश्यक कोड (जैसे कि न्यूल के लिए आदत जांच एक सूचक पर हटाने के पहले।