यहां 2018 के लिए अधिक पूर्ण उत्तर दिया गया है।
इन दिनों, बहुत सारे उपकरण आपको न केवल कुछ के रूप में चिह्नित करने की अनुमति देते हैं, बल्कि एक संदेश भी प्रदान करते हैं। यह आपको लोगों को यह बताने की अनुमति देता है कि कब कुछ निकाला गया था, और शायद उन्हें बदलने की ओर इशारा करें।
कंपाइलर समर्थन में अभी भी बहुत विविधता है:
- C ++ 14 समर्थन
[[deprecated]]/ [[deprecated(message)]]।
__attribute__((deprecated)) GCC 4.0+ और ARM 4.1+ द्वारा समर्थित है
__attribute__((deprecated))और इसके __attribute__((deprecated(message)))लिए समर्थित है:
- जीसीसी 4.5+
- कई संकलक जो जीसीसी 4.5+ (सेटिंग
__GNUC__/ __GNUC_MINOR__/ द्वारा __GNUC_PATCHLEVEL__) के रूप में सामने आते हैं
- Intel C / C ++ कंपाइलर कम से कम 16 पर वापस जा रहा है (आप विश्वास नहीं कर सकते
__GNUC__/ __GNUC_MINOR__, वे बस इसे सेट करते हैं जो भी जीसीसी का संस्करण स्थापित है)
- एआरएम 5.6+
- MS.10
__declspec(deprecated)13.10 से समर्थन करता है (विजुअल स्टूडियो 2003)
- MSVC
__declspec(deprecated(message))14.0 के बाद से समर्थन करता है (विजुअल स्टूडियो 2005)
आप [[gnu::deprecated]]C ++ 11 के हाल के संस्करणों में, इसके आधार पर भी उपयोग कर सकते हैं __has_cpp_attribute(gnu::deprecated)।
मैं में कुछ मैक्रो हेडली जो मैं नवीनतम जानकारी रखना है, लेकिन स्वचालित रूप से यह सब संभाल करने वर्तमान संस्करण (v2) इस प्रकार है:
#if defined(__cplusplus) && (__cplusplus >= 201402L)
# define HEDLEY_DEPRECATED(since) [[deprecated("Since " #since)]]
# define HEDLEY_DEPRECATED_FOR(since, replacement) [[deprecated("Since " #since "; use " #replacement)]]
#elif \
HEDLEY_GCC_HAS_EXTENSION(attribute_deprecated_with_message,4,5,0) || \
HEDLEY_INTEL_VERSION_CHECK(16,0,0) || \
HEDLEY_ARM_VERSION_CHECK(5,6,0)
# define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
# define HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
#elif \
HEDLEY_GCC_HAS_ATTRIBUTE(deprcated,4,0,0) || \
HEDLEY_ARM_VERSION_CHECK(4,1,0)
# define HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
# define HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
#elif HEDLEY_MSVC_VERSION_CHECK(14,0,0)
# define HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
# define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
#elif HEDLEY_MSVC_VERSION_CHECK(13,10,0)
# define HEDLEY_DEPRECATED(since) _declspec(deprecated)
# define HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
#else
# define HEDLEY_DEPRECATED(since)
# define HEDLEY_DEPRECATED_FOR(since, replacement)
#endif
मैं इसे एक अभ्यास के रूप में छोड़ दूंगा कि कैसे *_VERSION_CHECKऔर *_HAS_ATTRIBUTEमैक्रोज़ से छुटकारा पाएं यदि आप हडले का उपयोग नहीं करना चाहते हैं (मैंने हडले को बड़े पैमाने पर लिखा है तो मुझे नियमित रूप से इसके बारे में नहीं सोचना होगा)।
यदि आप GLib का उपयोग करते हैं, तो आप G_DEPRECATEDऔर G_DEPRECATED_FORmacros का उपयोग कर सकते हैं । वे हेडली से उतने मजबूत नहीं हैं, लेकिन अगर आप पहले से ही GLib का उपयोग करते हैं तो जोड़ने के लिए कुछ भी नहीं है।