मुझे हाल ही में पता चला है कि strdup()
फ़ंक्शन जिसे मैंने ओएस एक्स पर इतना उपयोग करके आनंद लिया है, वह एएनएसआई सी का हिस्सा नहीं है, लेकिन पॉज़िक्स का हिस्सा है। मैं अपने सभी कोड को फिर से लिखना नहीं चाहता, इसलिए मुझे लगता है कि मैं बस अपना खुद का strdup()
फ़ंक्शन लिखने जा रहा हूं। यह मुश्किल नहीं है, वास्तव में, यह सिर्फ malloc()
और strcpy()
है। वैसे भी, मेरे पास फ़ंक्शन है, लेकिन अगर मैं यह फ़ंक्शन लिखता हूं और इसे अपने कोड से लिंक करता हूं, तो मैं क्या कर रहा हूं, और यह libc में पहले से मौजूद है? क्या मेरा लिंकर या कंपाइलर मुझे मूल रूप से फ़ंक्शन के अपने संस्करण को परिभाषित करने की अनुमति देगा, या क्या मुझे इसे एक और नाम देना होगा? यदि एक ही नाम का पुन: उपयोग करने का कोई तरीका था, तो यह बहुत सुविधाजनक होगा, ताकि strcpy()
उपयोगकर्ता के libc में मौजूद हो, तो वे इसका उपयोग कर सकते हैं, लेकिन यदि यह उनके libc में मौजूद नहीं था, तो वे इसके बजाय मेरे संस्करण का उपयोग कर सकते थे कोड यथासंभव परिवर्तन।strdup() फ़ंक्शन
लघु संस्करण:
क) जब मैं एक में निर्मित समारोह के रूप में एक ही नाम के साथ अपने ही समारोह लिखना तो क्या होगा?
ख) मैं प्लेटफार्मों पर मेरे लिए क्या हो रहा बुरा चीजें हैं जो मेरे सारे कोड को फिर से लिखने strdup()
का उपयोग नहीं करने के लिए, जो सिर्फ एक सा कठिन है बिना strdup()
की जरूरत नहीं है से बचने के लिए कर सकते हैं?
आप महत्वाकांक्षी महसूस कर रहे हैं, तो आप भी automake और autoconf मैक्रो परीक्षण करने के लिए है कि क्या आप अपने आप को strdup परिभाषित करने की जरूरत है, इसके बजाय सभी संकलनकर्ता और वातावरण आप का समर्थन करना चाहते हैं की गणना के लिए आवश्यक कॉन्फ़िगर करने के लिए सेट कर सकते हैं। –