क्या एक्सटेंशन के बिना C ++ हैडर फाइलें एक अच्छा अभ्यास है?


9

मेरे पास C ++ दिशानिर्देशों का पालन करने के संबंध में मेरा एक तर्क है।

वह वर्तमान में अपने सभी पुस्तकालयों को इस तरह से डिजाइन करता है:

  • वह अपने फाइल में असंगत रूप से अपरकेस और लोअरकेस अक्षरों का उपयोग करता है
  • उनके कुछ शीर्षकों का कोई विस्तार नहीं है

मेरा मानना ​​है कि कोई भी एक्सटेंशन C ++ मानक फ़ाइलों के लिए आरक्षित नहीं है और अपरकेस अक्षरों का उपयोग करने में त्रुटि होती है (जब आप उस कोड से निपटते हैं जो विंडोज और लिनक्स दोनों पर काम करने के लिए होता है)।

उनका कहना है कि वे Qtसम्मेलनों का पालन ​​करते हैं (यहां तक ​​कि कोड के लिए जो क्यूटी का उपयोग नहीं करता है) और कहते हैं: "यदि क्यूटी इस तरह से करता है, तो यह बुरा नहीं हो सकता है।"

अब मैं एक खुले दिमाग रखने की कोशिश करता हूं, लेकिन मुझे वास्तव में बुरा लगता है जब मुझे उसके पुस्तकालयों के साथ काम करना पड़ता है। क्या इस बारे में नियमों का एक सामान्य स्थापित सेट है? क्या मानक इसके बारे में कुछ बताता है?

आपका बहुत बहुत धन्यवाद।


3
#define signal……… ("अगर Qt इसे इस तरह करता है, तो यह बुरा नहीं हो सकता है।") - मैं यह नहीं कह सकता कि मैं व्यक्तिगत रूप से सभी डिजाइन विकल्पों से सहमत हूं।
जस्टिन फेन

@ जस्टिन: न तो मैं। मेरे पास कुछ भी नहीं है Qt। मुझे भी लगता है कि यह एक अद्भुत पुस्तकालय है, लेकिन उनके कुछ डिज़ाइन विकल्प वास्तव में मेरे लिए गलत हैं।
ेरेऑन

1
@ जस्टिन मैंने मैक्रों _को लोकप्रिय, व्यापक रूप से उपयोग किए जाने वाले कोड के साथ शुरू करते देखा है , लेकिन यह मानक के विपरीत है।
लुचियन ग्रिगोर

1
लेकिन यहां एक्सटेंशन के बिना हेडर से बचने का एक वास्तविक कारण है: मेरा प्राथमिक आईडीई और टेक्स्ट एडिटर उन्हें स्वचालित रूप से नहीं पहचानेंगे। मैं बस *.hppएक सी ++ हेडर के लिए उपयोग करता हूं, और मेरे सभी उपकरण "इसे प्राप्त करें"।
जस्टिन

5
क्यूटी उस अधिवेशन का सही उपयोग करता है क्योंकि स्मार्ट प्रोग्रामर नहीं करते हैं। इसका मतलब है कि आपके हेडर नए Qt हेडर से नहीं टकराएंगे।
MSalters

जवाबों:


16

विस्तार (या कमी) नहीं जा रहा है, जहां तक ​​मुझे पता है, आप मुद्दों का कारण बनते हैं। मैं कहूंगा कि एक्सटेंशन को पूरी तरह से छोड़ना असुविधाजनक है क्योंकि इससे हेडर फ़ाइलों (उदाहरण के लिए वाइल्डकार्ड * .h और * .hpp) के लिए खोज करना मुश्किल हो जाता है और इससे फ़ाइल की सामग्री की पहचान करना अधिक कठिन हो जाता है (उदाहरण के लिए यदि आपका संपादक उचित सिंटैक्स हाइलाइटिंग मोड को चुनने के लिए विस्तार पर निर्भर करता है)।

देखने की एक कोड बिंदु से यह बहुत फर्क नहीं पड़ता है, यहां तक ​​कि आवरण समस्याग्रस्त नहीं है जब तक आप हर जगह एक सुसंगत मामले का उपयोग करते हैं और केवल फाइलों को अलग करने के लिए मामले के अंतर पर भरोसा नहीं करते हैं। सुविधा के दृष्टिकोण से, निचले मामले में रहना आसान है और एक्सटेंशन (या तो .h या .hpp) है।

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


एक सम्मेलन को चुनना और उससे चिपके रहना बुरा विचार नहीं है, लेकिन अगर मौजूदा सम्मेलन को बेहतर बनाया जा सके तो क्या होगा? उस मामले में, शायद यह पाठ्यक्रम को बदलने के लिए एक अच्छा विचार है।
कोटलिंस्की

@kotlinski यह उन मामलों में से एक है जहां कुछ भी नहीं है आप स्थिति को सुधारने के लिए कुछ भी नहीं कर सकते क्योंकि आप जो भी चुनते हैं वह वरीयता का मामला है। वास्तव में, कुछ विस्तार होने के बाद, मैं कहूंगा कि कोई भी बेहतर नहीं है, क्योंकि ओएस (रीड, विंडोज) यह निर्धारित कर सकता है कि एक्सटेंशन के आधार पर फ़ाइल को खोलने के लिए कौन सा प्रोग्राम है।
पॉल

@PaMManta: लेकिन क्या आप यहाँ अपने खिलाफ बहस नहीं कर रहे हैं? पहले, आप कहते हैं कि कुछ भी सुधारने का कोई तरीका नहीं है। फिर, आप कहते हैं कि एक्सटेंशन होना बेहतर है। यह एक प्रकार का पराजयवादी रवैया है, जिसमें कहा गया है कि कोई भी बदलाव संभव नहीं है।
kotlinski

@kotlinski सामान्य तौर पर, मुझे लगता है कि यह निर्भर करता है कि आप कितने पुराने कोड के साथ काम कर रहे होंगे, क्या यह सभी को नए सम्मेलन में बदलने के लिए व्यवहार्य होगा और क्या मिश्रण सम्मेलनों का प्रभाव होगा। इस मामले में हालांकि मैं पॉल मेंटा से सहमत हूं - यह ज्यादातर व्यक्तिगत प्राथमिकता है, जिसमें विस्तार व्यावहारिक कारणों से सबसे अधिक पसंद किया जाता है।
एडम बोवेन

1
@kotlinski कुछ भी सुधारने का कोई तरीका नहीं है, लेकिन चीजों को बदतर बनाने के तरीके हैं। यह चर्चा रिक्त स्थान-बनाम-टैब चर्चा जितनी ही निरर्थक है। बस एक कन्वेंशन उठाओ और जाओ कुछ उपयोगी है।
पॉल

6

कोई नियम (मानक में) नहीं है कि केवल मानक हेडर फाइलें बिना एक्सटेंशन के हो सकती हैं; फ़ाइल नाम बहुत कुछ भी आप चाहते हैं हो सकता है। सामान्य अच्छा अभ्यास, हालांकि, सुझाव है कि:

  1. कोई फाइल कभी भी बिना एक्सटेंशन के नहीं होती है, और

  2. विभिन्न प्रकार की फ़ाइलों में अलग-अलग एक्सटेंशन होते हैं - विशेष रूप से, C ++ हेडर हेडर की तुलना में एक अलग एक्सटेंशन ( .hppया .hh) का उपयोग करते हैं जो सी कंपाइलर के लिए स्वीकार्य हैं।

(अफसोस की बात है कि दूसरे नियम का अक्सर उल्लंघन किया जाता है, और एक अक्सर सी ++ हेडर फ़ाइलों को देखता है .h। व्यक्तिगत अनुभव से, मैं यह आश्वासन दे सकता हूं कि इससे सड़क की रखरखाव समस्याएं हो सकती हैं, लेकिन यह आम बात है।)

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

दोनों ही मामलों में, आप सर्वसम्मति से परियोजना के लिए नियम स्थापित करते हैं, और हर कोई उनका अनुसरण करता है।


1
मैं पूरी तरह से इस एक पर जेम्स के साथ हूँ। यदि यह एक ही एक्सटेंशन है, तो यह हेडर फ़ाइलों के 2 विभिन्न प्रकारों पर उचित रूप से काम करने के लिए एक बुरा सपना हो रहा है।

@TomTanner और अगर आपके पास एक्सटेंशन के बिना फाइल है तो यह और भी बुरा है। मैंने ज्यादातर यूनिक्स वातावरण में काम किया है, और यह हमेशा मुझे निराश करता है (और समस्याओं का कारण है) कि निष्पादन योग्य फ़ाइलों का विस्तार नहीं होता है।

6
If Qt does it that way, then it can't be bad.

हाँ। हाँ, यह वास्तव में, वास्तव में कर सकता है। उनका पुस्तकालय डिजाइन "हम इतनी बुरी तरह से जावा बनना चाहते हैं"। यह कुल गड़बड़ है। मानक पुस्तकालय बहुत बेहतर है।

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


यह एक अनुभवजन्य तर्क है। यह एक बड़ा सॉफ्टवेयर उत्पाद है जिसका उपयोग कई लोग करते हैं। यदि नामकरण सम्मेलन के इस विकल्प के कारण महत्वपूर्ण समस्याएं होती हैं, तो यह ज्ञात होगा और संभवतः अब तक बदल जाएगा। जैसा कि यह मामला नहीं है, यह बहुत बुरा नहीं हो सकता। इसका मतलब यह नहीं है कि यह सबसे अच्छा समाधान है, हालांकि।
एच। रिटिच

0

जैसा कि मुझे पता है कि 1998 के बाद से, केवल मानक पुस्तकालय हेडर बिना .h के होंगे। इसलिए गैर-मानक सी ++ हेडर फाइलें परंपरागत रूप से अभी भी .h के साथ लिखी जाती हैं। लेकिन ध्यान रखें कि यह एक कन्वेंशन है, आप बिना एक्सटेंशन या यहाँ तक कि .txt एक्सटेंशन का उपयोग कर सकते हैं, यह ऐसा है जैसे आप अपनी कक्षाओं को लोअर केस से शुरू करते हैं, यह अभी भी काम कर रहा है, लेकिन यह कन्वेंशन नहीं है।


3
Btw "अगर Qt इसे इस तरह करता है, तो यह बुरा नहीं हो सकता।" यह बहुत बुरा तर्क है ...

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

0

ये ऐसे नियम हैं जो नियमों का पालन करने के लिए कोई बाधा नहीं हैं, लेकिन जब संदर्भ के लिए यू आसपास आते हैं तो सम्मेलन जीवन को आसान बनाते हैं।

एक्सटेंशन के अनुसार (.h।, .hpp) उन फ़ाइलों को जिन्हें c ++ में शामिल किया गया है, उन्हें एक्सटेंशन की आवश्यकता नहीं है, यदि आप c ++ के अलावा अन्य हेडर का उपयोग कर रहे हैं, जैसे c पुस्तकालयों या पुस्तकालयों को बढ़ावा देने के लिए एक्सटेंशन का उपयोग करने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.