मानक के सटीक शब्दों है: जब नाम स्थान दायरे में वस्तुओं की घोषणा
static
कीवर्ड के उपयोग नहीं किया जाता।
एक हेडर फाइल में
कार्य inline
बजाय static
या एक अनाम नाम स्थान में होना चाहिए। inline
का अर्थ है कि आप केवल अपने प्रोग्राम में फ़ंक्शन की अधिकांश प्रतियों के साथ समाप्त हो जाएंगे, जबकि अन्य विधियां आपको प्रत्येक फ़ाइल से एक अलग प्रतिलिपि देंगी जिसमें हेडर शामिल है। साथ ही ब्लोट, यदि फ़ंक्शन में फ़ंक्शन-स्टेटिक डेटा होता है तो यह गलत व्यवहार दे सकता है। (संपादित करें: जब तक कि फ़ंक्शन को अलग-अलग संकलन इकाइयों में अलग-अलग परिभाषाएं नहीं माना जाता है, शायद हेडर फ़ाइल को शामिल करने से पहले परिभाषित किए गए विभिन्न प्रीप्रोसेसर मैक्रोज़ के कारण। उस स्थिति में सबसे अच्छा तरीका यह बिल्कुल शामिल नहीं करना है, बल्कि इसे अपने अपवित्र दिल के माध्यम से एक हिस्सेदारी के साथ एक अनजान कब्र में दफनाने के लिए।)
स्थिरांक के अलावा डेटा ऑब्जेक्ट्स को आमतौर पर हेडर फाइलों में परिभाषित नहीं किया जाना चाहिए, केवल extern
घोषित किया जाना चाहिए।
स्टेटिक सदस्य फ़ंक्शन मछली की एक अलग केतली हैं, और आपको static
का उपयोग करना होगा क्योंकि उन्हें घोषित करने का कोई अन्य तरीका नहीं है। उस उपयोग को बहिष्कृत नहीं किया गया है, क्योंकि यह नामस्थान क्षेत्र में नहीं है।
अद्यतन: सी ++ 11 ने बहिष्करण को हटा दिया है, इसलिए static
पर अनाम नामों को पसंद करने का कोई विशेष कारण नहीं है। लेकिन आपको अभी भी हेडर फ़ाइल में तब तक उपयोग नहीं करना चाहिए जब तक आप कुछ अजीब नहीं कर रहे हों।
स्रोत
2010-10-08 14:14:31
हेडर फ़ाइलों में स्थैतिक (या अनाम नामसेस्पेस) रखने के लिए काउंटर उत्पादक लगता है। यदि वे स्थिर हैं तो वे सिर्फ स्रोत फ़ाइल में क्यों नहीं हैं? –