এখানে 2018 এর আরও সম্পূর্ণ উত্তর দেওয়া হয়েছে।
এই দিনগুলিতে প্রচুর সরঞ্জাম আপনাকে কেবল কিছু হ্রাস করা হিসাবে চিহ্নিত না করে একটি বার্তা সরবরাহ করার অনুমতি দেয়। এটি আপনাকে কোনও কিছু যখন অবমূল্যায়ন করা হয়েছিল তা লোকেদের বলতে এবং এটি কোনও প্রতিস্থাপনের দিকে নির্দেশ করতে সহায়তা করে।
সংকলক সমর্থনে এখনও প্রচুর বৈচিত্র্য রয়েছে:
- সি ++ 14 সমর্থন করে
[[deprecated]]/ [[deprecated(message)]]।
__attribute__((deprecated)) GCC 4.0+ এবং এআরএম 4.1+ দ্বারা সমর্থিত
__attribute__((deprecated))এবং এর __attribute__((deprecated(message)))জন্য সমর্থিত:
- GCC 4.5+
- বেশ কয়েকটি সংকলক যা জিসিসি 4.5+ হিসাবে সজ্জিত করে (সেট করে
__GNUC__/ __GNUC_MINOR__/ __GNUC_PATCHLEVEL__)
- ইনটেল সি / সি ++ কম্পাইলার কমপক্ষে 16 এ ফিরে যেতে পারে (আপনি বিশ্বাস করতে পারবেন না
__GNUC__/ __GNUC_MINOR__, তারা কেবল এটি জিসিসির যে কোনও সংস্করণ ইনস্টল করা আছে এটিতে সেট করে)
- এআরএম 5.6+
- এমএসভিসি
__declspec(deprecated)13.10 (ভিজ্যুয়াল স্টুডিও 2003) থেকে সমর্থন করে
- এমএসভিসি
__declspec(deprecated(message))14.0 (ভিজ্যুয়াল স্টুডিও 2005) থেকে সমর্থন করে
এছাড়াও আপনি ব্যবহার করতে পারেন [[gnu::deprecated]]সি ++ 11 ঝনঝন সাম্প্রতিক সংস্করণ উপর ভিত্তি করে __has_cpp_attribute(gnu::deprecated)।
আমি হেটলিতে এই সমস্তগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করতে কিছু ম্যাক্রো রেখেছি যা আমি আপ টু ডেট রাখি তবে বর্তমান সংস্করণ (ভি 2) এর মতো দেখাচ্ছে:
#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ম্যাক্রোগুলি ব্যবহার করতে পারেন । এগুলি হিডলির মতো শক্তিশালী নয় তবে আপনি যদি ইতিমধ্যে জিএলিব ব্যবহার করেন তবে যুক্ত করার মতো কিছুই নেই।