c - Passing variables to #include through #define -


क्या इन पंक्तियों के साथ कुछ करना संभव है:

  #define import_and_other (s) \ Some \ #include s  

ऐसा है कि:

  import_and_other ("file.h")  

हो जाता है :

  कुछ #include "file.h"  

असल में, कुछ फाइलें हैं जिन्हें हमेशा शामिल किए जाने से पहले ही उसी कार्रवाई की आवश्यकता होती है, इसलिए मैं इन कार्यों को करने के लिए # अप लपेट करना चाहते हैं।

नहीं!

सीएमएक्स मानक कहते हैं (खंड 6.10.2):

फ़ॉर्म का एक प्रीप्रोसेसिंग निर्देश

  # पीपी-टोकन नया -लाइन  

(जो दो पिछले रूपों में से एक से मेल नहीं खाता है) की अनुमति है। निदेशालय में शामिल होने के बाद प्रीप्रोसेसिंग टोकन को सामान्य पाठ के रूप में प्रोसेस किया जाता है। (वर्तमान में एक मैक्रो नाम के रूप में परिभाषित प्रत्येक पहचानकर्ता को पूर्वप्रक्रमित टोकन की अपनी प्रतिस्थापन सूची के द्वारा बदल दिया गया है।) सभी प्रतिस्थापन के परिणामस्वरूप दिए गए निर्देश दो पिछले रूपों में से एक से मेल खाते हैं।

हालांकि, एक अन्य नियम (खंड 10.6.3.2, 'द ऑपरेटर' पर) जो कहते हैं:

फ़ंक्शन-जैसे मैक्रो के लिए प्रतिस्थापन सूची में प्रत्येक # प्रीप्रोसेटिंग टोकन के रूप में एक पैरामीटर प्रतिस्थापन सूची में अगला प्रीप्रोसेटिंग टोकन।

मैक्रो विस्तार में '#include s' इस बाधा में विफल रहता है - शब्द 'शामिल' मैक्रो-जैसी फ़ंक्शन के लिए कोई पैरामीटर नहीं है। / P>

यह आपको एक (प्रयोग करने योग्य) '#include' निर्देश को उत्पन्न करने से रोकता है। किसी भी मामले में, मैक्रो विस्तार के दौरान, एक और नियम (खंड 10.6.3.4) है जो कहते हैं:

जिसके परिणामस्वरूप पूरी तरह से मैक्रो-प्रतिस्थापित प्रीप्रोसेसिंग टोकन अनुक्रम प्रोप्रोसेसिंग निर्देश के रूप में संसाधित नहीं किया जाता है भले ही यह एक जैसा दिखता है।

इसका अर्थ है कि आप मैक्रो विस्तार के परिणाम से कोई भी पूर्वप्रक्रमक निर्देश नहीं बना सकते हैं।

आपका प्रयास, दुख की बात है, विफलता के लिए बर्बाद हो गया है।


Comments

Popular posts from this blog

Indexing in SQL -

multithreading - Do lock objects in Java need to be static? -

objective c - iPhone and it's wireless area -