मैं static inline
का उपयोग करता हूं, लेकिन static
भी काम करेगा।
extern
और extern inline
बाहर हैं क्योंकि आप एक से अधिक बाहरी परिभाषाओं अगर हैडर एक से अधिक अनुवाद इकाई में शामिल है मिल चाहते हैं, तो आप static
, static inline
और inline
विनिर्देश पर विचार करने की जरूरत है।
हेप्टिक सही ढंग से अपने उत्तर में बताता है कि अधिकांश कंपेलर inline
निर्दिष्ट किए गए हैं या नहीं, भले ही inline
का मुख्य प्रभाव जुड़ाव पर इसका प्रभाव है।
हालांकि, static
परिभाषाओं में आंतरिक संबंध है, इसलिए static
और static inline
के बीच बहुत अंतर नहीं है; मैं पूरी तरह से स्टाइलिस्ट कारणों के लिए हेडर फ़ाइलों में फ़ंक्शन परिभाषाओं के लिए static inline
पसंद करता हूं (अंगूठे का नियम: हेडर फ़ाइलों में केवल extern
घोषणाएं, static const
चर परिभाषाएं और static inline
फ़ंक्शन परिभाषाएं होनी चाहिए)।
inline
static
बिना या extern
परिणाम एक इनलाइन परिभाषा, जो मानक राज्यों (C99 6.7.4, §6)
में एक बाहरी परिभाषा है, जो एक अनुवादक के लिए उपयोग कर सकते हैं के लिए एक विकल्प प्रदान करता है को उसी अनुवाद इकाई में फ़ंक्शन पर कोई भी कॉल लागू करें। यह निर्दिष्ट नहीं है कि फ़ंक्शन पर कॉल इनलाइन परिभाषा या बाहरी परिभाषा का उपयोग करता है।
यानी इनलाइन परिभाषाओं को हमेशा बाहरी परिभाषाओं के साथ होना चाहिए, जो आप खोज रहे हैं।
C99 इनलाइन अर्थ विज्ञान की बारीकियों के बारे में कुछ अधिक जानकारी this answer में पाया जा सकता, Clang homepage और C99 Rationale (PDF) पर।
ध्यान रखें कि जीसीसी केवल C99 अर्थ विज्ञान का उपयोग करेगा अगर -std=c99
या -std=gnu99
मौजूद है रखें ...
** ** उन्हें ** हेडर में लागू करने के लिए बुरा है, उन्हें परिभाषित नहीं करना;) – m0skit0
सी/सी ++ में हेडर फ़ाइल का विचार डेवलपर्स के लिए अतिरिक्त काम करता है, मुझे समझ में आता है कि कोई भी घोषणा आकार को दोहराना नहीं चाहता – linquize
कोड आकार में छोटा या यह क्या करता है में छोटा: डी? – UmNyobe