c - कहत - सी में शीर्ष लेख फ़ाइलों में स्थिर फ़ंक्शन परिभाषाएं कब डालनी हैं?




डोमेन परिभाषा in hindi (4)

मुझे कुछ कोड मिल गया है जिसमें एक हेडर फ़ाइल में एक बड़े स्थिर फ़ंक्शन है और जब मैं यह करने के लिए ठीक नहीं है, तो मैं उत्सुक हूं। उदाहरण के लिए, यदि कई। .c फाइलों में हैडर शामिल है, तो क्यों न सिर्फ फ़ंक्शन को गैर-स्थिर निर्धारित करें और इसमें लिंक करें?

किसी भी सलाह या अंगूठे के नियम कब / जब सी में हेडर फाइलों में स्थैतिक फ़ंक्शन परिभाषाएं नहीं डालनी चाहें तो इसकी सराहना की जाएगी,

धन्यवाद


अंगूठे का एक नियम के रूप में, आपको हेडर फाइलों में स्थिर फ़ंक्शन नहीं डालनी चाहिए। एक बंद कार्यक्रम में, संभवतः आपके कोड के आकार के विस्तार के अलावा, कुछ भी दुख नहीं होगा क्योंकि आपको प्रत्येक मॉड्यूल में एक बेमानी कॉपी मिल गई है। साझा लाइब्रेरी में, यह आसानी से कीड़े पैदा कर सकता है क्योंकि अब आपकी लाइब्रेरी का हिस्सा पुस्तकालय के कॉलरों में एम्बेड किया गया है, इसलिए संस्करण बेमेल आसानी से हो सकता है।

यदि आपको कुछ बहुत ही भयानक समय-महत्वपूर्ण कार्य मिल गया है, जहां फ़ंक्शन कॉल के मामले में समय बिताया गया है, तो आप उसे शीर्ष लेख में डालकर विचार कर सकते हैं, लेकिन उस मामले में (ए) आप संभवत: इसे भी इनलाइन घोषित करना चाहते हैं, और (बी) आप पहले से ही अन्य सभी अनुकूलन कर चुके हैं जिन्हें आप पा सकते हैं।

संक्षेप में, जब तक आप एक संदेह की छाया से परे नहीं जानते कि आपको हेडर फ़ाइल में अपने स्थिर फ़ंक्शन की आवश्यकता है ... आप एक हेडर फ़ाइल में एक स्थिर कार्य नहीं करना चाहते हैं; आप। में अपने शीर्ष लेख के साथ एक। सी फ़ाइल में एक गैर-स्थिर समारोह चाहते हैं।


आधुनिक सी ने ऐसे कार्य के लिए inline कीवर्ड को सी ++ से अपनाया है। लेकिन अगर आपके कंपाइलर में हेडर फाइल में static (अभी तक?) static नहीं है, तो इसका अनुकरण करने का एक तरीका है। inline मतलब यह नहीं है कि फ़ंक्शन आवश्यक रूप से किसी भी कॉलर को लिखे गए हैं, लेकिन केवल अंतिम निष्पादन योग्य में अधिकांश प्रतिलिपि में आमतौर पर होगा। (तकनीकी रूप से संबंधित लिंकर प्रतीकों "कमजोर" प्रतीकों हैं।) इसके विपरीत, अगर सिर्फ static घोषित किया जाता है तो हर संकलन इकाई एक प्रति रखेगी।

हेडर में फ़ंक्शन परिभाषा होने के इस तरह के दृष्टिकोण को छोटे फ़ंक्शंस तक सीमित किया जाना चाहिए, जो छोटे कार्य करते हैं, जिसके लिए आपके कंपाइलर कोड को काफी सुधार कर सकते हैं यदि यह कॉलिंग फ़ंक्शन में अनुकूलित है।

ऐसा करते समय, इन कार्यों के कार्यान्वयन से भी सावधानी बरतें। आप उस द्वारा सी ++ में घोषणाओं को शामिल करने की संभावना को तोड़ सकते हैं आम तौर पर दो भाषाओं में केवल इंटरफेस पर सहमत होते हैं, ज़रूरी नहीं कि कार्यान्वयन के लिए, सूक्ष्म अंतर


मेरे अनुभव में यह आमतौर पर एक .h फ़ाइल में एक समारोह को परिभाषित करने के लिए एक बुरा विचार है, और मैंने ऐसा करने का कारण कभी नहीं किया है, दुर्घटना से ऐसा करने से एक बार मेरे सिर दर्द का कोई अंत नहीं हुआ

यद्यपि मुझे लगता है कि यह प्रत्येक फ़ाइल की अनुमति देगा, जिसमें फ़ंक्शन के अपने अलग-अलग कार्यान्वयन के लिए हैडर भी शामिल होगा, यदि फ़ंक्शन में स्थैतिक वार्स हैं, तो वांछित व्यवहार हो सकता है उदाहरण के लिए यदि आप चाहते हैं कि प्रत्येक जानकारी के लिए अलग-अलग जानकारी रखना चाहिए फ़ाइल।


यदि फ़ंक्शन में बाह्य संबंध है, तो इसे .h फ़ाइल में घोषित किया जाना चाहिए।

यदि फ़ंक्शन स्थैतिक है, और इसलिए इसमें कोई बाहरी संबंध नहीं है, तो फ़ंक्शन केवल .c फ़ाइल में ही घोषित किया जाना चाहिए जिसमें यह परिभाषित किया गया है।

हेडर फाइल में फ़ंक्शन परिभाषित करने के लिए कभी भी ठीक नहीं होता है





code-organization