শিরোনামে ম্যাক্রো বনাম স্ট্যাটিক ফাংশন


9

প্রচুর দ্রুত কাজের জন্য যেখানে কেউ কোনও ফাংশন নিয়োগ করতে পারে f(x,y), সাদামাটা সিতে ম্যাক্রো ব্যবহার করা হয়। আমি এই কেসগুলি সম্পর্কে বিশেষভাবে জিজ্ঞাসা করতে চাই, যেগুলি কোনও ফাংশন কল দ্বারা সমাধানযোগ্য (যেমন স্বেচ্ছাসেবীর কোডের কোড বিস্তারের জন্য নয় ইনলাইনিং ফাংশনগুলির জন্য ব্যবহৃত ম্যাক্রোগুলি)।

সাধারণত সি ফাংশনগুলি ইনলাইন করা হয় না কারণ তারা অন্যান্য সি ফাইল থেকে লিঙ্কযুক্ত হতে পারে। তবে স্থিতিশীল সি ফাংশনগুলি কেবলমাত্র সি ফাইলের মধ্যেই সেগুলিতে সংজ্ঞায়িত হয়। সুতরাং সেগুলি সংকলকগুলি অন্তর্ভুক্ত করতে পারে। আমি শুনেছি যে প্রচুর ম্যাক্রোগুলি স্থিতিশীল ফাংশনে রূপান্তরিত করে তাদের প্রতিস্থাপন করা উচিত, কারণ এটি নিরাপদ কোড তৈরি করে।

এমন কোনও মামলা রয়েছে যেখানে এটি একটি ভাল ধারণা নয়?

আবার: ## একই ধরণের কনস্ট্রাক্টস সহ কোড-প্রোডাকশন ম্যাক্রোগুলি সম্পর্কে জিজ্ঞাসা করা হয়নি যা কোনও কার্য হিসাবে প্রকাশ করা যায় না।


4
আমি মনে করি আপনার প্রশ্নের উত্তর এখানে দেওয়া যেতে পারে stackoverflow.com/questions/9104568/macro-vs-function-in-c এবং এখানে স্ট্যাকওভারফ্লো
মারু

যথাযথ ম্যাক্রো লেখা একটি ব্যথা এবং inlineআইং ফাংশনগুলি কেবল এটি বাইনারিতে একাধিকবার সংজ্ঞায়িত করা যায় তা নিশ্চিত করে, সংকলক সিদ্ধান্ত নিতে পারে যে এটি আসলে স্থানটি বাঁচানোর জন্য এটি ইনলাইন করবে কিনা
ratchet freak

2
আমি আসলে এগুলির বেশিরভাগটিকেই historicalতিহাসিক কারণে সন্দেহ করব। যুগ পূর্বে, সি সংকলকগুলিতে কোনও কার্যই ইনলাইন করা হয়নি। তাই লোকেরা যে জিনিসগুলি অন্তর্ভুক্ত করতে চেয়েছিল তার জন্য ম্যাক্রোগুলি ব্যবহার করেছিল। সি কোড সাধারণত অস্বাভাবিকভাবে দীর্ঘকালীন হয়।
জানু হুডেক

@ratchetfreak: সি এর নেই inline, এটি সি ++ সম্পর্কে নয়।
ওয়ার্লবেল

2
@ ভাইরবেল অবশ্যই inlineসি তে আছে, কমপক্ষে সি 99 এর পর থেকে। দ্রুত পর্যালোচনার জন্য, ইনলাইন ফাংশনগুলিতে উইকিপিডিয়া দেখুন ।
আমন

উত্তর:


6

ফাংশন কল দ্বারা সমাধানযোগ্য ম্যাক্রোগুলিতে প্রচুর ঝুঁকি রয়েছে:

  • এগুলি লেখা শক্ত, কারণ আপনার মতো যুক্তি সঠিকভাবে পরিচালনা করতে হতে পারে ++i
  • এগুলি ভিজ্যুয়াল ডিবাগারের সাথে ডিবাগ করা শক্ত কারণ আপনি ম্যাক্রো দিয়ে পা রাখতে পারবেন না বা সেখানে ব্রেকআপপয়েন্ট রাখতে পারবেন না।
  • সংকলন নির্ভরতা বিশ্লেষণ করার সময় এগুলি সঠিকভাবে পরিচালনা করা শক্ত।

ফাংশন কল দ্বারা দ্রবণযোগ্য ম্যাক্রোগুলি একটি প্রাথমিক সংকলক ইনলাইনিং সরবরাহ করতে দরকারী হতে পারে। আমি কোনও সংকলক ইনলাইন ফাংশন পরিচালনা করছেন না এবং কিছু সংকলন ইউনিট জুড়ে ইনলাইন করতে পারেন সম্পর্কে অবগত নই।

সাধারণত সি ফাংশনগুলি ইনলাইন করা হয় না কারণ তারা অন্যান্য সি ফাইল থেকে লিঙ্কযুক্ত হতে পারে।

কোনও সংকলক কোনও ফাংশনের দুটি সংস্করণ, একটি traditional callতিহ্যবাহী এড এক এবং একটি inlineডি সরবরাহ করতে সক্ষম হবেন না এমন কোনও কারণ নেই । আপনি যে সংকলকটি টার্গেট করছেন তার ডকুমেন্টেশনটি আপনার দেখতে হবে। এছাড়াও, আপনি উত্পন্ন সমাবেশটি দেখতে চাইতে পারেন: এমনকি যদি আপনি সমাবেশটি না জানেন তবে আপনি দ্রুত কোনও ফাংশনটি অন্তর্ভুক্ত করা হয়েছে কিনা তা জানাতে শিখতে পারেন। (এটি দ্রুত শিখতে শিশুর উদাহরণ দিয়ে শুরু করুন))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.