.Inl फ़ाइल में घोषणाएँ होने के क्या फायदे हैं? मुझे उसी का उपयोग करने की आवश्यकता कब होगी?
.Inl फ़ाइल में घोषणाएँ होने के क्या फायदे हैं? मुझे उसी का उपयोग करने की आवश्यकता कब होगी?
जवाबों:
.inlफ़ाइलें अनिवार्य नहीं हैं और संकलक के लिए कोई विशेष महत्व नहीं है। यह आपके कोड को संरचित करने का एक तरीका है जो मनुष्यों को एक संकेत प्रदान करता है जो इसे पढ़ सकते हैं।
मैं .inlदो मामलों में फ़ाइलों का उपयोग करता हूं :
दोनों ही मामलों में, मैं कार्यों की घोषणाओं एक हेडर फाइल है, जो अन्य फ़ाइलों से शामिल किया गया है में, तो मैं डाल फ़ाइल हेडर फाइल के तल पर।#include.inl
मुझे यह पसंद है क्योंकि यह इंटरफ़ेस को कार्यान्वयन से अलग करता है और हेडर फ़ाइल को पढ़ने में थोड़ा आसान बनाता है। यदि आप कार्यान्वयन विवरण के बारे में परवाह करते हैं, तो आप .inlफ़ाइल खोल सकते हैं और इसे पढ़ सकते हैं। यदि आप नहीं करते हैं, तो आपके पास नहीं है।
.tccटेम्पलेट कार्यान्वयन फ़ाइलों के लिए उपयोग करता है ।
glmऔर .inl का उपयोग उसी तरह करता है, जैसा आपने ऊपर बताया है। जानने के लिए अच्छा है, महान जवाब के लिए धन्यवाद :)
निक मेयर सही है: कंपाइलर आपके द्वारा शामिल फ़ाइल के विस्तार की परवाह नहीं करता है, इसलिए ".h", ".hpp", ".hxx", ".hh", ".inl" जैसी चीज़ें। ".inc", आदि एक साधारण सम्मेलन है, यह स्पष्ट करने के लिए कि फाइलों में क्या निहित है।
सबसे अच्छा उदाहरण एसटीएल हेडर फाइलें हैं जिनका कोई विस्तार नहीं है।
आमतौर पर, ".inl" फाइलों में इनलाइन कोड होता है (इसलिए ".inl" एक्सटेंशन)।
जब आप हेडर कोड के बीच निर्भरता चक्र रखते हैं, तो ".inl" फाइलें एक आवश्यकता होती हैं ।
उदाहरण के लिए:
// A.hpp
struct A
{
void doSomethingElse()
{
// Etc.
}
void doSomething(B & b)
{
b.doSomethingElse() ;
}
} ;
तथा:
// B.hpp
struct B
{
void doSomethingElse()
{
// Etc.
}
void doSomething(A & a)
{
a.doSomethingElse() ;
}
} ;
आगे की घोषणा का उपयोग करने सहित, आपके पास यह संकलन करने का कोई तरीका नहीं है।
इसके बाद समाधान दो प्रकार की हेडर फ़ाइलों में परिभाषा और कार्यान्वयन को तोड़ता है:
hpp हेडर घोषणा / परिभाषा के लिएinl हेडर कार्यान्वयन के लिएजो निम्नलिखित उदाहरण में टूट जाता है:
// A.hpp
struct B ;
struct A
{
void doSomethingElse() ;
void doSomething(B & b) ;
} ;
तथा:
// A.inl
#include <A.hpp>
#include <B.hpp>
inline void A::doSomethingElse()
{
// Etc.
}
inline void A::doSomething(B & b)
{
b.doSomethingElse() ;
}
तथा:
// B.hpp
struct A ;
struct B
{
void doSomethingElse() ;
void doSomething(A & a) ;
} ;
तथा:
// B.INL
#include <B.hpp>
#include <A.hpp>
inline void B::doSomethingElse()
{
// Etc.
}
inline void B::doSomething(A & a)
{
a.doSomethingElse() ;
}
इस तरह, आप अपने स्रोत में जो भी ".inl" फ़ाइल शामिल कर सकते हैं, और यह काम करेगा।
फिर, शामिल फ़ाइलों के प्रत्यय नाम वास्तव में महत्वपूर्ण नहीं हैं, केवल उनके उपयोग।
If the function were not inline, you would you standard .cpp file for the implementation part?संभवतः। टेम्पलेट कोड के उदाहरण हैं जो आमतौर पर .CPP फ़ाइलों में नहीं छिपाए जा सकते हैं, इसलिए उस स्थिति में .INL फ़ाइल अनिवार्य होगी।
चूंकि किसी और ने इसका उल्लेख नहीं किया है:
अपने इनलाइन फ़ंक्शंस को स्टोर करने के लिए .inl फ़ाइलों का उपयोग कंपाइल को गति देने के लिए उपयोगी हो सकता है।
यदि आप केवल घोषणाओं (.h) को शामिल करते हैं, जहाँ आपको घोषणाओं की आवश्यकता होती है, और केवल इनलाइन कार्यान्वयन (.inl) शामिल होते हैं, जहाँ आपको उनकी आवश्यकता होती है (अर्थात शायद केवल .cpp और अन्य .inl फ़ाइलों में, .h की), तो यह हो सकता है। आपके हेडर निर्भरता पर लाभकारी प्रभाव।
यह कई इंटरेक्टिव कक्षाओं के साथ बड़ी परियोजनाओं पर एक महत्वपूर्ण जीत हो सकती है।
मेरे अनुभव में, .inl फ़ाइलों का उपयोग इनलाइन फ़ंक्शंस को परिभाषित करने के लिए किया जाता है। जब वे एक .inl फ़ाइल में होते हैं, तो फ़ाइल को इनलाइन फ़ंक्शंस प्राप्त करने के लिए हेडर में और नियमित कार्य परिभाषाएँ प्राप्त करने के लिए एक .c फ़ाइल में शामिल किया जा सकता है।
इस तरह एक ही स्रोत अधिक आसानी से संकलक के साथ काम कर सकता है जिसमें इनलाइन फ़ंक्शन सपोर्टस के साथ-साथ संकलक भी नहीं हैं।
वे आमतौर पर सीधे C कोड के साथ उपयोग किए जाते हैं, अक्सर C ++ कोड के साथ नहीं होते हैं क्योंकि सभी C ++ कंपाइलर इनलाइन फ़ंक्शन का समर्थन करते हैं।
#define inline static, और शीर्ष लेख में अपने इनलाइन फ़ंक्शन को परिभाषित करेंगे।
मेरा मानना है कि यह "हेडर" फ़ाइल के लिए सिर्फ एक नामकरण सम्मेलन है जिसमें इनलाइन कोड शामिल है। ऐसा इसलिए है कि .h फ़ाइलों में परिभाषाएँ हो सकती हैं और .inl फ़ाइलों में इनलाइन कोड होता है जो टेम्प्लेट के लिए आवश्यक होता है।
मुझे विश्वास नहीं है कि फ़ाइल के उद्देश्य को स्पष्ट करने के लिए नामकरण सम्मेलन की तुलना में इसमें अधिक कुछ भी नहीं है