2012-11-26 26 views
7

के साथ संकलित करते समय 'प्रतिबंध' कीवर्ड को हटाने के लिए मैक्रो मुझे मूल रूप से सी में सी ++ प्रोजेक्ट में लिखे गए कुछ शीर्षलेखों को शामिल करने की आवश्यकता है। शीर्षलेख फ़ाइलों में, restrict keyword का उपयोग किया जाता है, जो C++ के लिए सिंटैक्स त्रुटि की ओर जाता है।सी ++

मैं एक प्रीप्रोसेसर मैक्रो की तलाश में हूं जो जांचता है कि मैं एक सी ++ कंपाइलर के साथ संकलित कर रहा हूं और इस मामले में restrict कीवर्ड हटा देता हूं।

उत्तर

10
#ifdef __cplusplus 
#define restrict 
#endif 

इसे करना चाहिए। restrict सी ++ में कोई कीवर्ड नहीं है, इसलिए #define इसे कुछ भी असंभव नहीं है।

या, जैसा कि Arne Mertz का सुझाव दिया, बेहतर अभी भी,

extern "C" { 
#define restrict 
// include C headers here 
#undef restrict 
} 

जहाँ आप अपने सी में सी हेडर ++ स्रोत शामिल हैं।

+1

'प्रतिबंध' को परिभाषित करने के लिए कुछ भी नहीं होगा सी में भी कानूनी होगा (चूंकि प्रीप्रोसेसर सी संकलक इसे देखे जाने से पहले स्रोत को बदलता है), लेकिन इसका इरादा नहीं होगा। –

+0

@AlexeyFeldgendler यही कारण है कि यह '#ifdef __cplusplus' के साथ लपेटा गया है ... – SomeWittyUsername

+3

यदि आप सी हेडर्स को शामिल करने से पहले सी ++ कोड में '# परिभाषित' डालते हैं (साथ ही 'बाहरी" सी' {'के साथ आपको आवश्यकता होगी), आपको '# ifdef/# endif' की भी आवश्यकता नहीं होगी। कम से कम आक्रामक होने का प्रयास करें, जिसका अर्थ है कि आपके सी कोड को संशोधित न करें क्योंकि कोई C++ में lib का उपयोग करने का प्रयास कर सकता है। इसके बजाए सी ++ कोड संशोधित करें। –