यह सिर्फ विधि का एक परिवर्तन के रूप में @ मीकल Górny (मैं वहाँ टिप्पणी स्थान शेष नहीं) द्वारा दिया गया है ...
आप एक निम्न रूप में फ़ाइल को शामिल बना सकते हैं:
/* Automatically created file - do not edit or ugly dinosaur will eat you */
#ifndef PREFIX
# define RENAME(f)
#else
# define RENAME(f) PREFIX ## f
#endif
/* list all the function and variables you want to rename here in one place */
#define func_foo RENAME(func_foo)
#define func_bar RENAME(func_bar)
/* ... many more ... */
#undef RENAME
कम से कम gcc
आपको विकल्प -include rename.h
विकल्प के साथ कमांड लाइन से हेडर फ़ाइल को शामिल करने की अनुमति देता है (माना जाता है कि इस फ़ाइल को rename.h
कहा जाता है)। क्योंकि आप gcc
लुकलाइक विकल्प (-O3
और Os
) का उपयोग करते हैं, मुझे लगता है कि आप इस उत्तर के बाकी हिस्सों में gcc
का उपयोग कर रहे हैं। अन्यथा, यदि आपका सी कंपाइलर उचित है, तो आप इसे किसी भी तरह से करने में सक्षम होना चाहिए।
आप बना सकते हैं आसानी से अपने पुस्तकालय के दो या यहां तक कि तीन संस्करणों है कि एक ही समय में में जोड़ा जा सकता है अगर आप चाहते हैं, अपने सी संकलक के लिए विभिन्न विकल्पों प्रदान करके (CFLAGS
सेटिंग के माध्यम से यहाँ):
CFLAGS += -include rename.h -DPREFIX=fast_ -D_BUILD_FAST -O3 -DBENCHMARKING
CFLAGS += -include rename.h -DPREFIX=small_ -D_BUILD_SMALL -Os -DBENCHMARKING
CFLAGS += -D_BUILD_FAST -O2
यदि आपकी लाइब्रेरी हेडर फाइलें बहुत नियमित लगती हैं और यदि आप लाइब्रेरी निजी फ़ंक्शंस static
घोषित करते हैं, तो आपके लिए rename.h
फ़ाइल स्वचालित रूप से उत्पन्न करने के लिए बहुत ही सरल नियमित अभिव्यक्तियों का उपयोग करके कुछ डमी स्क्रिप्ट द्वारा उन शीर्षलेख फ़ाइलों से फ़ंक्शंस निकालना आसान है। यदि आप make
या कुछ समान उपयोग कर रहे हैं तो यह एक प्राकृतिक निर्माण लक्ष्य है। सभी वैश्विक चरों को एक ही विधि का उपयोग करके एक साथ उपयोग करने की अनुमति देने के लिए भी नाम बदलना होगा।
इस समाधान के साथ तीन मुख्य बिंदु होते हैं:
- बदसूरत नाम व्यापार एक फ़ाइल में छिपा हो सकता है, आप वास्तविक स्रोत फ़ाइलों संपादित करने के लिए की जरूरत नहीं है - विशेष रूप से आप अव्यवस्था की जरूरत नहीं है स्रोत फाइलें लेकिन उन्हें साफ और पढ़ने में आसान रख सकती हैं।
- नामांकन आसानी से स्वचालित हो सकता है, यदि आप कुछ सरल सिद्धांतों का पालन करते हैं (हेडर फाइलों के लिए कोडिंग सम्मेलन कोडिंग और हेडर फाइलें सभी वैश्विक चर और कार्यों की घोषणा करेंगे)।
- अपने परीक्षण कार्यक्रम को कई बार चलाने की आवश्यकता के जरिए बेंचमार्किंग को और अधिक बोझिल बनाने का कोई कारण नहीं है (यह प्रासंगिक है यदि आप आलसी हैं जैसे मैं करता हूं और पुनरावृत्ति कार्यों को हिंसक तरीके से नापसंद करता हूं - मुझे पता है कि बहुत से लोग परवाह नहीं करते हैं , यह कुछ हद तक वरीयता का मामला है)।
यह प्रश्न बहुत अस्पष्ट है। – Falmarri
क्यों न सिर्फ विभिन्न विकल्पों के साथ कई संस्करणों को चालू/बंद करें और प्रत्येक को बेंचमार्क करें? –
यदि आप समान नामित हैं (और स्थैतिक नहीं हैं) तो आप दोनों कार्यों को एक ही लिंक में संयोजित नहीं कर सकते हैं। – mah