2012-03-25 3 views
5

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

लेकिन अब हेडर फाइल में इसे और अधिक पठनीय बनाने के लिए बहुत ही असामान्य कुछ (एक हेडर फाइल होने के लिए), मैं इस तरह कुछ करने के लिए सोचा है:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

और फ़ाइल my_header.inline.c तरह होगा:

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

तब, जब मैं इन कार्यों को चाहता हूं तो मुझे हेडर फ़ाइल शामिल है।

मेरा प्रश्न है: बहुत अधिक कोड के साथ हेडर फ़ाइल भरने के बिना इसे पूरा करने का एक बेहतर तरीका है? या मैं यह कर सकता हूं और अन्य डेवलपर्स को बिना किसी समस्या के इस कोड को समझने की उम्मीद कर सकता हूं?

+1

हेडर में इनलाइन फ़ंक्शंस के साथ समस्या क्या है? इनलाइन फ़ंक्शंस बहुत छोटा होना चाहिए, एक-लाइनर, वास्तव में। – littleadv

+1

कोड प्रदर्शन के लिए, केवल एक चीज यह है कि आप यह कैसे देख सकते हैं कि यह मामला माप है या नहीं। सभी कंपाइलर के साथ आपके कंपाइलर की मंदी क्या है? मेरा अनुभव यह है कि ऐसी चीजें आधुनिक कंपाइलरों के साथ नगण्य हैं। और सैकड़ों कॉन्फ़िगरेशन विकल्पों को रखने में परेशानी के लायक नहीं है जिन्हें आप आसानी से मिलाते हैं। –

उत्तर

1

नहीं आप नहीं कर सकते। हालांकि, आप जीसीसी की लिंक टाइम ऑप्टिमाइज़ेशन फीचर का उपयोग कर सकते हैं (फिर कुछ कॉल इनलाइन हो सकते हैं, भले ही फ़ंक्शन को inline घोषित न किया गया हो और प्रत्येक संकलन इकाई के लिए हेडर में उपलब्ध न हो), उदा। संकलित औरgcc -flto के साथ संकलित करें (इसके लिए हाल ही में जीसीसी कंपाइलर की आवश्यकता है, उदाहरण के लिए 4.6 कम से कम और बिल्ड समय धीमा कर दें)।

1

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

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

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