2011-02-28 17 views
7

सी के लिए सबसे अच्छा अभ्यास क्या है जिसे आपने सी हेडर फ़ाइल में रखा है?क्या आपके सभी को एक हेडर फ़ाइल में शामिल करना एक अच्छा विचार है?

क्या एक हेडर फ़ाइल में एकाधिक स्रोत फ़ाइलों में एक प्रोग्राम के लिए उपयोग किए जाने वाले सभी शामिल करना उपयोगी है?

व्यावहारिक रूप से प्रत्येक फ़ाइल (यानी stdio.h) में उपयोग किए जाने वाले कार्यों के बारे में क्या है?

उत्तर

11

नहीं। यह बस क्रूर और ओवरहेड जोड़ता है।

एक रखरखाव के रूप में आपको सामना करने वाली सबसे बड़ी पीड़ाओं में से एक यह पता लगा रहा है कि को शामिल करने की आवश्यकता नहीं है और उनसे छुटकारा पाने की आवश्यकता है। व्हील आपको 20+ हेडर की सूची में मिलता है, आप contemplating ugly things शुरू करते हैं जैसे ब्रूट इसे मजबूर कर रहा है (एक समय में एक को हटा रहा है और कुछ भी तोड़ रहा है)।

उन लोगों के प्रति दयालु रहें जिन्हें भविष्य में अपनी सामग्री को बनाए रखना है। प्रति मॉड्यूल की आवश्यकता वाले हेडर का उपयोग करें, कोई और नहीं ..

+1

... और निश्चित रूप से यह ब्रूटफोर्सिंग इस तथ्य से और जटिल है कि आपको प्रत्येक समर्थित ओएस पर "कुछ भी तोड़ने" का परीक्षण करना चाहिए, संभावित रूप से कई अलग-अलग बिल्ड-टाइम कॉन्फ़िगरेशन के तहत। – caf

0

एक हेडर फ़ाइल वास्तव में आपके सी प्रोग्राम से शामिल है। इसमें स्ट्रक्चर, मैक्रोज़, फ़ंक्शन परिभाषा इत्यादि जैसे डेटा स्ट्रक्चर शामिल हैं .. कभी-कभी एक ही हेडर फ़ाइल ठीक हो सकती है, अगर आपका प्रोग्राम तार्किक घटकों में बढ़ता है, तो आपको और आवश्यकता हो सकती है।

3

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

कल्पना कीजिए कि आपके पास हेडर MyHeader.h है। यदि आप इसमें कोई परिवर्तन करते हैं जिसके लिए उस पर निर्भर कोड बदलने की आवश्यकता होती है, तो उस आश्रित कोड को ढूंढना आसान है यदि प्रत्येक फ़ाइल जिसका उपयोग करता है तो #include "MyHeader.h" है - आप केवल शामिल कथन के लिए वैश्विक खोज कर सकते हैं।

दूसरी ओर आप केवल कुछ अन्य शीर्ष लेख MyHugeHeader.h में MyHeader.h शामिल है, और फिर शामिल कि अपनी फाइलों में आप एक ही नहीं कर सकते, क्योंकि सभी फ़ाइलों जैसे MyHeader.h का उपयोग में है, #include "MyHugeHeader.h" है के रूप में ही हर दूसरी फाइल।

1

व्यक्तिगत वरीयता वास्तव में ... इससे कोई फर्क नहीं पड़ता कि जब तक आप लगातार होते हैं (जो इसे पढ़ने में आसान बनाता है) । आप इसे 1 हेडर फ़ाइल में डाल सकते हैं या आप इसे हर फाइल में डाल सकते हैं जिसकी आवश्यकता है। यह इस बात पर भी निर्भर करता है कि मुख्य के बाद आने वाले किसी भी चीज को लोड करने की आवश्यकता नहीं होती है और इसलिए आपकी सभी अन्य फाइलों के लिए एक ही हेडर फ़ाइल का उपयोग करना या नहीं हो सकता है (कंपाइलर पर निर्भर करता है) इसमें शामिल हैं एकाधिक बार।

संपादित करें: मैं मैक के साथ भी इस बात से सहमत करने के लिए, डाल दिया तो उसी तरह इसे

1

कुछ काम करने के लिए एक बहुत, बहुत अच्छी बात है, जहां का उपयोग किया है पहले ही बताया नहीं:

  • अनावश्यक निर्भरता संकलन समय में जोड़ें। जब आप एक शीर्षलेख संशोधित करते हैं, तो आपको सभी संकलन इकाइयों को पुन: संकलित करना होगा जिसमें इसे प्रत्यक्ष या अप्रत्यक्ष रूप से शामिल किया जाएगा। यदि समावेशन की आवश्यकता नहीं है, तो पुनर्मूल्यांकन या तो नहीं है। आपका प्रोग्राम जितना बड़ा होगा, उतना ही बड़ा समस्या होगी, खासकर यदि आपने अपने प्रोग्राम को कंपोजेंट में तोड़ दिया है जिसका पुनर्मूल्यांकन मैन्युअल रूप से ट्रिगर करना है।

  • प्री-कंपाइलर हेडर अधिक कुशल हो सकते हैं जब आप अनियंत्रित निर्भरताओं को जोड़ते हैं।

1

मैं जानबूझकर डाल नहीं होगा मेरे सभी शामिल एक भी हेडर फाइल में, बस क्योंकि अगर आप इन शामिल हेडर फाइल में से एक बदलने के लिए, तुम सब कुछ है कि अपने "मास्टर" शामिल किया गया है फ़ाइल को शामिल पुन: संयोजित करना होगा । यह एक लाइन परिवर्तन के लिए अनावश्यक रूप से लंबे संकलन के समय का कारण बन सकता है।

उस ने कहा, मैं यह सुनिश्चित करने में बहुत अधिक समय नहीं लगाऊंगा कि मैं बयान शामिल करने के साथ बहुत उदार नहीं हूं। कुछ इंजीनियरों को संकलन समय पर बचाने के लिए बहुत कम समय व्यतीत करने में मदद मिलेगी, और मुझे लगता है कि उनका समय बेहतर समस्याओं को सुलझाने या नई सुविधाओं पर काम करने के लिए बेहतर है।

3

सभी संभावित शीर्षलेखों को एक एप्लिकेशन शीर्षलेख में रखना गलत है जितना गलत हो सकता है।

यह आलसी है जो बहुत अच्छी कीमत पर आती है। यह भंगुर बनाता है। यह समझना मुश्किल बनाता है कि वास्तविक निर्भरता कहां हैं, और इस प्रकार कोड को फिर से उपयोग करने या अन्यथा पुन: उपयोग करने में कठिनाई होती है।

यह परीक्षण करना मुश्किल बनाता है।

लेकिन सबसे बड़ी समस्या यह है कि यह बौद्धिक आलस्य का प्रतिनिधित्व करती है और इसके बारे में अधिक प्रोत्साहित करती है।

सभी प्रोग्रामिंग मुद्दों के रूप में, क्या आवश्यक है, और नहीं, कम नहीं। रखरखाव के बारे में सोचो। निर्माण प्रबंधन के बारे में सोचो।

बस सोचें।

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