में फ़ंक्शन कॉल को ओवरराइड करें, मैं कॉल को लॉग इन करने के लिए विभिन्न एपीआई को कुछ फ़ंक्शन कॉल ओवरराइड करना चाहता हूं, लेकिन मैं वास्तविक फ़ंक्शन पर भेजने से पहले डेटा को हेरफेर करना चाहता हूं।सी
उदाहरण के लिए, मैं अपने स्रोत कोड में getObjectName
हजारों बार नामक फ़ंक्शन का उपयोग करता हूं। मैं कभी-कभी इस फ़ंक्शन को अस्थायी रूप से ओवरराइड करना चाहता हूं क्योंकि मैं अलग-अलग परिणाम देखने के लिए इस फ़ंक्शन के व्यवहार को बदलना चाहता हूं।
मैं इस तरह एक नया स्रोत फ़ाइल बनाने:
#include <apiheader.h>
const char *getObjectName (object *anObject)
{
if (anObject == NULL)
return "(null)";
else
return "name should be here";
}
मैं के रूप में मैं आमतौर पर करते हैं मेरे सभी अन्य स्रोत संकलन है, लेकिन मैं पहले एपीआई पुस्तकालय के साथ जोड़ने से पहले इस समारोह के खिलाफ लिंक करें। यह ठीक काम करता है सिवाय इसके कि मैं स्पष्ट रूप से अपने ओवरराइडिंग फ़ंक्शन के अंदर वास्तविक फ़ंक्शन को कॉल नहीं कर सकता।
क्या त्रुटियों/चेतावनियों को जोड़ने/संकलित किए बिना फ़ंक्शन को "ओवरराइड" करने का कोई आसान तरीका है? आदर्श रूप से मैं लिंकिंग विकल्पों के साथ चारों ओर झुकाव के बजाय या मेरे प्रोग्राम के वास्तविक स्रोत कोड को बदलने के बजाय बस एक अतिरिक्त फ़ाइल या दो को संकलित और लिंक करके फ़ंक्शन को ओवरराइड करने में सक्षम होना चाहता हूं। में
#ifdef INTERCEPT
#define getObjectName(x) myGetObectName(x)
#endif
और इस प्रकार समारोह को लागू (:
@dreamlax, अब हम विशिष्ट (जीसीसी/लिनक्स) समाधान करने के लिए सामान्य (सी) से आगे बढ़ रहे है - यह एक अच्छा विचार होगा कि तुम क्या इतनी के रूप में सही उत्तर को लक्षित करने के चला रहे हैं स्पष्ट करने के लिए । – paxdiablo
वैसे मैं लिनक्स पर विकास कर रहा हूं लेकिन लक्ष्य मैक ओएस, लिनक्स और विंडोज हैं। असल में मैं उन कारणों में से एक को ओवरराइड करना चाहता हूं क्योंकि मुझे संदेह है कि वे विभिन्न ऑपरेटिंग सिस्टम पर अलग-अलग व्यवहार करते हैं। – dreamlax