इन दिनों के लिए एक और अधिक पूरा जवाब है, उपकरणों का एक बहुत कुछ के रूप में पदावनत तुम सिर्फ कुछ चिह्नित नहीं करने की अनुमति है, लेकिन एक संदेश भी प्रदान करें। यह आपको लोगों को बताने की इजाजत देता है जब कुछ बहिष्कृत किया गया था, और शायद उन्हें प्रतिस्थापन की ओर इंगित करें।
MSVC का समर्थन करता है सी ++ 11 में, __has_cpp_attribute(gnu::deprecated)
पर आधारित है। मैं जो मैं नवीनतम जानकारी रखना स्वचालित रूप से यह सब संभाल करने Hedley में कुछ मैक्रो है, लेकिन वर्तमान संस्करण (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
मैक्रोज़ से छुटकारा पाने का तरीका जानें (मैंने हेडली को काफी हद तक लिखा था इसलिए मुझे नियमित आधार पर इसके बारे में सोचना नहीं होगा)।
यदि आप जीएलआईबी का उपयोग करते हैं, तो आप G_DEPRECATED
और G_DEPRECATED_FOR
मैक्रोज़ का उपयोग कर सकते हैं। वे हेडली के लोगों के रूप में मजबूत नहीं हैं, लेकिन यदि आप पहले ही जीएलआईबी का उपयोग करते हैं तो इसमें कुछ भी नहीं है।
क्या आप मैक्रो में [[बहिष्कृत]] का उपयोग कर सकते हैं? – Zammbi
@Zammbi आपको सक्षम होना चाहिए, क्योंकि मैक्रो को संकलन से पहले प्रीप्रोसेसर द्वारा संभाला जाता है। [[बहिष्कृत]] प्रकट होना चाहिए (और संकलक आउटपुट से संबंधित चेतावनियां दें) जहां मैक्रो का मूल्यांकन किया जाता है। –