না, এটি করার কোনও পোর্টেবল উপায় নেই। তারপরে আবার # প্রাগমা ব্যবহার করার মতো কোনও পোর্টেবল উপায় নেই। এ কারণে, অনেক সি / সি ++ সংকলক প্রগমা জাতীয় জিনিসগুলি করার জন্য তাদের নিজস্ব পদ্ধতিগুলি সংজ্ঞায়িত করে এবং তারা প্রায়শই ম্যাক্রোগুলিতে এম্বেড করা যেতে পারে তবে প্রতিটি সংকলকটিতে আপনার আলাদা ম্যাক্রো সংজ্ঞা প্রয়োজন। আপনি যদি সেই পথে যেতে ইচ্ছুক হন তবে আপনি প্রায়শই এই জাতীয় জিনিসগুলি শেষ করেন:
#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
শুরুতে এবং শেষের মতো বন্ধনী নির্মান করতে চান তবে জিসিসির মতো কিছু সংকলক একটি ধরণের স্বাক্ষরের সাথে সংযোজন হিসাবে বৈশিষ্ট্যগুলি যুক্ত করে এবং কিছু এমএসসির মতো এটি উপসর্গ হিসাবে যুক্ত করে (বা কমপক্ষে এটি করেছিল) একবার, আমি এমএসসি ব্যবহার করেছি এর বহু বছর পরে)। বন্ধনী সংক্রান্ত চুক্তিগুলি আপনাকে এমন কিছু সংজ্ঞা দিতে দেয় যা সর্বদা কাজ করে, এমনকি যদি আপনাকে একটি সংকলক নির্মাণে পুরো টাইপের স্বাক্ষরটি পাস করতে হয় তবে।
অবশ্যই, আপনি যদি চান এমন গুণাবলী ছাড়াই এটি একটি সংকলকটিতে পোর্ট করার চেষ্টা করেন, তবে ম্যাক্রোগুলিকে কিছুতেই প্রসারিত করতে পারেন এবং আপনার কোডটি এখনও চালিত হবে আশা করে আপনি কিছুই করতে পারবেন না। খাঁটি সতর্কতা বা প্রগমগুলি অনুকূল করার ক্ষেত্রে এটি সম্ভবত। অন্যান্য ক্ষেত্রে, খুব বেশি না।
ওহ, এবং আমি সন্দেহ করি যে আপনার অবশ্যই Weak_b এবং Weak_e কে ম্যাক্রো হিসাবে প্যারামিটারগুলি সংজ্ঞায়িত করতে হবে, তবে কীভাবে এই উদাহরণটির জন্য একটি দুর্বল সংজ্ঞা তৈরি করা যায় তার জন্য আমি ডক্সের মাধ্যমে পড়তে রাজি ছিল না। আমি পাঠকের জন্য অনুশীলন হিসাবে ছেড়ে।