नहीं, ऐसा करने का कोई पोर्टेबल तरीका नहीं है। फिर फिर, #pragma का उपयोग करने के लिए कोई पोर्टेबल तरीके नहीं हैं। इस वजह से, कई सी/सी ++ कंपाइलर्स प्रज्ञा जैसी चीजों को करने के लिए अपने स्वयं के तरीकों को परिभाषित करते हैं, और उन्हें अक्सर मैक्रोज़ में एम्बेड किया जा सकता है, लेकिन आपको प्रत्येक कंपाइलर पर एक अलग मैक्रो परिभाषा की आवश्यकता होती है। आपको लगता है कि मार्ग जाने के लिए तैयार हैं, तो आप अक्सर इस तरह काम करना अंत:
#if defined(COMPILER_GCC)
#define Weak_b
#define Weak_e __attribute__((weak))
#elif defined(COMPILER_FOO)
#define Weak_b __Is_Weak
#define Weak_e
#endif
#define DEFINE_DELETE_OBJECT(type) \
Weak_b void delete_ ## type_(int handle) Weak_e; \
Weak_b void delete_ ## type(int handle) Weak_e;
मामले में अपनी नहीं स्पष्ट आप Weak_b
और Weak_e
शुरू और अंत bracketing निर्माणों के रूप में परिभाषित करना चाहते हैं क्योंकि जीसीसी जैसे कुछ compilers गुणों को एक प्रकार के हस्ताक्षर में एक परिशिष्ट के रूप में जोड़ें, और कुछ, जैसे कि एमएससी इसे उपसर्ग के रूप में जोड़ता है (या कम से कम यह एक बार किया गया है, जब से मैंने एमएससी का उपयोग किया है)। ब्रैकेटिंग संरचना होने से आप हमेशा कुछ काम करने की अनुमति देते हैं जो हमेशा काम करता है, भले ही आपको पूरे प्रकार के हस्ताक्षर को कंपाइलर निर्माण में पास करना पड़े।
बेशक, यदि आप इसे इच्छित गुणों के बिना किसी कंपाइलर को पोर्ट करने का प्रयास करते हैं, तो आप कुछ भी नहीं कर सकते हैं, लेकिन मैक्रोज़ को कुछ भी नहीं बढ़ाएं और उम्मीद है कि आपका कोड अभी भी चलता है। पूरी तरह से चेतावनी या प्रथाओं को अनुकूलित करने के मामले में, यह संभावना है। अन्य मामलों में, इतना नहीं।
ओह, और मुझे संदेह है कि आपको वास्तव में वीक_बी और वीक_ई को पैरामीटर लेने वाले मैक्रोज़ के रूप में परिभाषित करने की आवश्यकता होगी, लेकिन मैं इस उदाहरण के लिए कमजोर परिभाषा बनाने के लिए दस्तावेज़ों को पढ़ने के लिए तैयार नहीं था। मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ देता हूं।
यकीनन यह है न ही कुछ संकलक मुद्दों से निपटने के लिए है - #pragmas या तो सी या सी ++ मानकों द्वारा परिभाषित नहीं हैं। –
प्रीप्रोसेसर है, भले ही विशिष्ट अनुमत उपमांड वह दौड़ना चाहता है। – Puppy
@DeadMG: सी और सी ++ के बीच आम हैं जो बहुत सी चीजें हैं। जबकि प्रीप्रोसेसिंग _mostly_ आम है, वहीं प्रीप्रोसेसिंग को किस भाषा मानक का उपयोग किया जा रहा है (C89, C99, C++, और C++ 0x FCD) के आधार पर प्रीप्रोसेसिंग निर्दिष्ट करने में प्रमुख अंतर हैं। –