2015-10-27 11 views
10

में मैक्रो प्रतिस्थापन मैं एक बाहरी नाम से परिभाषित मैक्रो के रूप में पारित फ़ाइल नाम के साथ #include निर्देश का उपयोग करना चाहता हूं।# अंतर्निहित निर्देश

उदा।

#include #FILE".h" 

जहां FILE स्ट्रिंग MyFile (उद्धरण के बिना) के रूप में परिभाषित किया जाएगा, में

#include "MyFile.h" 

stringizing ऑपरेटर # जिसके परिणामस्वरूप प्रतीक FILE एक मैक्रो तर्क नहीं है, जैसा कि यहाँ नहीं किया जा सकता। मैंने कोई फायदा नहीं उठाया है, मैंने अन्य दृष्टिकोणों की कोशिश की है।

क्या आपको कोई समाधान दिखाई देता है?

+1

जीसीसी * बाहरी रूप से * फ़ाइलों को शामिल करने के लिए कुछ कार्यक्षमता प्रदान करता है http://stackoverflow.com/questions/3387453/include-header-files-using-command-line- विकल्प। यह आपकी मदद कर सकता है। –

+0

दिलचस्प। मैं जीसीसी और एमएसवीसी दोनों का उपयोग कर रहा हूं, और मेरा # अंतर्निहित निर्देश पहली स्थिति में नहीं हो सकता है। –

+2

यह संभव नहीं होगा, क्योंकि प्रीप्रोसेसर चरण के बाद तक आसन्न स्ट्रिंग शाब्दिक concatenation नहीं किया जाता है, उदाहरण के लिए '" माईफाइल "" एच "' वैध नाम शामिल नहीं होगा। क्या आप बस 'FILE' को वास्तविक हेडर नाम के रूप में परिभाषित नहीं कर सकते हैं, उदा। '-DFILE =" MyFile.h "'? –

उत्तर

12

स्ट्रिंग शाब्दिक concatenation #include के बाद दो अनुवाद चरणों का होता है - डायरेक्टिव हल हो जाते हैं; आपका दृष्टिकोण काम नहीं कर सकता है। इसके बजाय,

#define STRINGIZE_(a) #a 
#define STRINGIZE(a) STRINGIZE_(a) 

#define MYFILE stdio 
#include STRINGIZE(MYFILE.h) 

int main() { 
    printf("asdf"); 
} 

Demo के साथ कुछ कोशिश करें।

+0

कमाल, पूरी तरह से काम करता है! –

संबंधित मुद्दे