আপনার প্রশ্নের উত্তর দিতে, ম্যাক্রোগুলি প্রধানত কী জন্য ব্যবহৃত হয় তা সম্পর্কে চিন্তা করুন (সতর্কতা: মস্তিষ্ক-সংকলিত কোড)।
- ম্যাক্রোস প্রতীকী ধ্রুবকগুলি সংজ্ঞায়িত করত
#define X 100
এটি সহজেই এর সাথে প্রতিস্থাপন করা যেতে পারে: const int X = 100;
- ম্যাক্রোজগুলি ইনলাইন টাইপ-অজোনস্টিক ফাংশনগুলি (প্রয়োজনীয়ভাবে) সংজ্ঞায়িত করতে ব্যবহৃত হত
#define max(X,Y) (X>Y?X:Y)
যে কোনও ভাষায় যা ফাংশন ওভারলোডিংকে সমর্থন করে, এটি জেনেরিক ফাংশন দ্বারা জেনেরিকগুলিকে সমর্থন করে এমন একটি ভাষায়, সঠিক ধরণের ওভারলোড হওয়া ফাংশনগুলি রেখে, বা আরও বেশি টাইপ-নিরাপদ পদ্ধতিতে অনুকরণ করা যায়। ম্যাক্রো আনন্দের সাথে পয়েন্টার বা স্ট্রিং সহ যে কোনও কিছুর তুলনা করার চেষ্টা করবে যা সংকলন করতে পারে, তবে আপনি যা চেয়েছিলেন তা অবশ্যই তা নয়। অন্যদিকে, আপনি যদি ম্যাক্রোগুলি টাইপ-সেফ করেন তবে তারা ওভারলোডড ফাংশনগুলির মাধ্যমে কোনও সুবিধা বা সুবিধা দেয় না।
- ম্যাক্রোজগুলি প্রায়শই ব্যবহৃত উপাদানগুলিতে শর্টকাট নির্দিষ্ট করতে ব্যবহৃত হত।
#define p printf
এটি সহজেই কোনও ফাংশন দ্বারা প্রতিস্থাপিত p()
হয় যা একই কাজ করে। এটি সি এর সাথে পুরোপুরি জড়িত (আপনাকে va_arg()
ফাংশনগুলির পরিবার ব্যবহার করার প্রয়োজন হয়) তবে অন্যান্য অনেক ভাষায় যা ফাংশন আর্গুমেন্টের পরিবর্তনশীল সংখ্যাকে সমর্থন করে, এটি অনেক সহজ।
কোনও বিশেষ ম্যাক্রো ভাষার পরিবর্তে কোনও ভাষার মধ্যে এই বৈশিষ্ট্যগুলি সমর্থন করা সহজ, ত্রুটি প্রবণতা কম এবং অন্যদের কোড পড়ার ক্ষেত্রে কম বিভ্রান্তিকর। আসলে, আমি ম্যাক্রোগুলির জন্য একটি একক ব্যবহারের ক্ষেত্রে ভাবতে পারি না যা সহজে অন্য উপায়ে নকল করা যায় না। শুধুমাত্র জায়গা যেখানে ম্যাক্রো সত্যিই দরকারী যখন তারা মত শর্তাধীন সংকলন নির্মান বাঁধা হয় #if
(ইত্যাদি)।
সেই বিষয়ে, আমি আপনার সাথে তর্ক করব না, যেহেতু আমি বিশ্বাস করি যে জনপ্রিয় ভাষাগুলিতে শর্তসাপেক্ষ সংকলনের অ প্রিপ্রপ্রসেসর সমাধানগুলি অত্যন্ত জটিল (জাভাতে বাইটকোড ইঞ্জেকশনটির মতো) are তবে ডি-এর মতো ভাষাগুলি এমন সমাধান নিয়ে এসেছে যেগুলি প্রিপ্রোসেসর প্রয়োজন হয় না এবং প্রিপ্রসেসর শর্তাবলীর চেয়ে বেশি জটিল নয়, যদিও ত্রুটি-প্রবণতা অনেক কম।