कम से कम जीसीसी और ग्लिब के साथ, मानक सी कार्यों के लिए प्रतीक कमजोर हैं और इस प्रकार आप उन्हें ओवरराइड कर सकते हैं। उदाहरण के लिए,
strcpy.c:
#include <string.h>
#include <stdio.h>
char * strcpy(char *dst, const char *src)
{
char *d = dst;
while (*src) {
*d = *src;
d++;
src++;
}
printf("Called my strcpy()\n");
return (dst);
}
int main(void)
{
char foo[10];
strcpy(foo, "hello");
puts(foo);
return 0;
}
और यह निर्माण इस तरह:
gcc -fno-builtin -o strcpy strcpy.c
और उसके बाद:
$ ./strcpy
Called my strcpy()
hello
नोट -fno-builtin
यहाँ के महत्व। यदि आप इसका उपयोग नहीं करते हैं, तो जीसीसी strcpy()
को बिल्टिन फ़ंक्शन पर कॉल करेगा, जिसमें से जीसीसी की संख्या है।
मुझे यकीन नहीं है कि यह अन्य कंपाइलर्स/प्लेटफॉर्म के साथ काम करता है या नहीं।
क्यों आप ऐसा करना चाहते हैं? * संभवतः * बिंदु क्या हो सकता है? –
क्या यह वास्तव में परेशानी के लायक है? आपको string.h शीर्षलेख फ़ाइल को संपादित करना होगा, जिसका स्थान उस सिस्टम और पर्यावरण पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। लेकिन मुझे लगता है कि आप एक अलग समारोह लिखने से बेहतर होगा। – Shredderroy
@ कोडीग्रे, मुझे लगता है, फातालरर के [उत्तर] (http://stackoverflow.com/questions/9107259/how-to-replace-c-standard-library-functioin#9107319) को देखकर, कि आप प्रत्येक कॉल को प्रतिस्थापित कर सकते हैं अपने आप को निष्पादन योग्य जो प्रिंटिंग डीबगिंग करता है? या ऐसा कुछ, मुझे लगता है। हालांकि शायद अच्छा अभ्यास नहीं है। आपको एक अलग नाम के साथ एक नया फ़ंक्शन लिखना चाहिए और सभी कॉल बदलना चाहिए। – Anthony