के साथ एक (केवल पढ़ने के लिए तीसरे पक्ष के) शीर्षक lib.h
पर विचार करें:सी प्रीप्रोसेसर मैक्रो का नाम कैसे बदलें?
#define XYZ 42
एक स्रोत फ़ाइल में, मैं एक असंबंधित प्रयोजन के लिए शब्द XYZ
उपयोग करना चाहते हैं, और करते 42
साथ प्रतिस्थापन नहीं चाहते हैं। लेकिन, एक ही स्रोत फ़ाइल में, अन्य प्रयोजनों के लिए, मैं से lib.h
से बिना हार्डकोडिंग के मूल्य तक पहुंच बनाना चाहता हूं। मैं का नाम बदल सकता हूं XYZ
से मैक्रो, LIB_XYZ
कहां से?
निम्नलिखित काम नहीं करता है, क्योंकि पूर्वप्रक्रमक समय LIB_XYZ
प्रतिस्थापन किया जाता है पर XYZ
चाहता है, लेकिन XYZ
अपरिभाषित किया गया था:
#include "lib.h"
#define LIB_XYZ XYZ
#undef XYZ
वहाँ एक रास्ता अपने अंतिम करने के लिए LIB_XYZ
के विस्तार में पूर्वप्रक्रमक चाल करने के लिए है XYZ
से पहले मूल्य खो गया है?
मुझे लगता है कि आप अटक गए हैं, अगर आप तीसरे पक्ष के शीर्षलेख फ़ाइल से LIB_XYZ की परिभाषा प्राप्त करना चाहते हैं, और सी कंपाइलर के अलावा कुछ भी उपयोग नहीं करना चाहते हैं। अगर मुझे ऐसा करना पड़ा, तो शायद मैं lib.h को our_lib.h में बदलने के लिए एक स्क्रिप्ट लिखूंगा, चयनित # परिभाषित संशोधित के साथ, मेरे कोड को our_lib.h शामिल करें, और सही बनाने के लिए मेकफ़ाइल का उपयोग करें यदि lib बदल गया –
शायद [यह] (http://stackoverflow.com/questions/1793800/can-i-redefine-a-c-macro-then-define-it-back) मदद कर सकता है। –