नहीं, ऐसा करने का कोई पोर्टेबल तरीका नहीं है। फिर, #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
शुरू-और-अंत ब्रैकेटिंग निर्माणों के रूप में, क्योंकि जीसीसी जैसे कुछ संकलक एक प्रकार के हस्ताक्षर के लिए एक परिशिष्ट के रूप में विशेषताओं को जोड़ते हैं, और कुछ, जैसे एमएससी इसे एक उपसर्ग के रूप में जोड़ते हैं (या कम से कम यह किया था) एक बार, जब से मैंने MSC का उपयोग किया है, तो यह वर्षों से है)। कोष्ठक संदूषण होने से आप कुछ ऐसा काम कर सकते हैं, जो हमेशा काम करता है, भले ही आपको पूरे प्रकार के हस्ताक्षर एक कंपाइलर निर्माण में करने पड़ें।
यदि आप चाहते हैं कि विशेषताओं के बिना एक संकलक को पोर्ट करने की कोशिश करें, तो आप कुछ भी नहीं कर सकते हैं, लेकिन मैक्रोज़ को कुछ नहीं करने के लिए छोड़ दें और उम्मीद करें कि आपका कोड अभी भी चलता है। विशुद्ध रूप से चेतावनी देने या व्यावहारिक अनुकूलन के मामले में, यह संभावना है। अन्य मामलों में, इतना नहीं।
ओह, और मुझे संदेह है कि आपको वास्तव में Weak_b और Weak_e को मैक्रोज़ के रूप में परिभाषित करना होगा जो पैरामीटर लेते हैं, लेकिन मैं डॉक्स के माध्यम से पढ़ने के लिए तैयार नहीं था कि इस उदाहरण के लिए केवल एक कमजोर परिभाषा कैसे बनाई जाए। मैं पाठक के लिए एक अभ्यास के रूप में छोड़ देता हूं।