আপনি চেয়েছিলেন এটি সম্ভবত আরও বিশদ উত্তর, তবে আমি মনে করি একটি শালীন ব্যাখ্যা ন্যায়সঙ্গত।
সি এবং সি ++ এ, একটি উত্স ফাইলকে একটি অনুবাদ ইউনিট হিসাবে সংজ্ঞায়িত করা হয় । কনভেনশন দ্বারা, শিরোনাম ফাইল ফাংশন ঘোষণা, টাইপ সংজ্ঞা এবং শ্রেণীর সংজ্ঞা রাখে। আসল ফাংশন বাস্তবায়নগুলি অনুবাদ ইউনিটগুলিতে থাকে, যেমন .cpp ফাইলগুলিতে।
এর পিছনে ধারণাটি হ'ল ফাংশন এবং শ্রেণি / কাঠামোর সদস্য ফাংশনগুলি একবার সংকলন এবং একত্রিত হয়, তারপরে অন্যান্য ফাংশনগুলি নকল তৈরি না করেই কোনও জায়গা থেকে কোডটি কল করতে পারে। আপনার ফাংশনগুলি স্পষ্টভাবে "বাহ্যিক" হিসাবে ঘোষণা করা হয়েছে।
/* Function declaration, usually found in headers. */
/* Implicitly 'extern', i.e the symbol is visible everywhere, not just locally.*/
int add(int, int);
/* function body, or function definition. */
int add(int a, int b)
{
return a + b;
}
যদি আপনি কোনও অনুবাদ ইউনিটের জন্য কোনও ফাংশন স্থানীয় হতে চান তবে আপনি এটি 'স্ট্যাটিক' হিসাবে সংজ্ঞায়িত করেন। এটার মানে কি? এর অর্থ হ'ল যদি আপনি বাহ্যিক ফাংশন সহ উত্স ফাইলগুলি অন্তর্ভুক্ত করেন তবে আপনি পুনরায় সংজ্ঞা ত্রুটি পাবেন কারণ সংকলকটি একই বাস্তবায়নে একাধিকবার আসে। সুতরাং, আপনি চান যে আপনার সমস্ত অনুবাদ ইউনিট ফাংশন ঘোষণাটি দেখতে পারে তবে ফাংশন বডি নয় ।
সুতরাং কিভাবে এটি সব একসাথে ছড়িয়ে পড়ে? এটি লিঙ্কারের কাজ। একটি লিঙ্কার সমস্ত অবজেক্ট ফাইলগুলি পড়েন যা এসেম্বেলার স্টেজ দ্বারা উত্পন্ন এবং প্রতীকগুলি সমাধান করে ol যেমনটি আমি আগেই বলেছি, একটি চিহ্ন কেবল একটি নাম। উদাহরণস্বরূপ, কোনও ভেরিয়েবল বা ফাংশনের নাম। যখন অনুবাদ ইউনিটগুলি ফাংশনগুলিকে কল করে বা প্রকারগুলি ঘোষণা করে তখন সেই ফাংশনগুলি বা প্রকারগুলির জন্য বাস্তবায়নটি জানেন না, তখন সেই চিহ্নগুলি সমাধান না করা বলে। লিঙ্কারটি অনুবাদ ইউনিটের সাথে সংযোগ স্থাপনের মাধ্যমে অমীমাংসিত প্রতীককে সমাধান করে যা বাস্তবায়ন রয়েছে এমনটির সাথে অপরিবর্তিত প্রতীককে ধরে রাখে। ইসস। এটি আপনার কোডে প্রয়োগ করা হয়েছে বা অতিরিক্ত পাঠাগার দ্বারা সরবরাহ করা হয়েছে তা বাহ্যিকভাবে দৃশ্যমান সমস্ত চিহ্নের ক্ষেত্রে সত্য। একটি লাইব্রেরি সত্যই পুনরায় ব্যবহারযোগ্য কোড সহ একটি সংরক্ষণাগার।
দুটি উল্লেখযোগ্য ব্যতিক্রম আছে। প্রথমত, আপনার যদি একটি ছোট ফাংশন থাকে তবে আপনি এটি ইনলাইন করতে পারেন। এর অর্থ হ'ল উত্পাদিত মেশিন কোডটি কোনও বাহ্যিক ফাংশন কল উত্পন্ন করে না, তবে আক্ষরিক অর্থে জায়গায় is যেহেতু এগুলি সাধারণত ছোট হয় তাই আকারের ওভারহেড কোনও বিষয় নয়। এগুলি যেভাবে কাজ করে তা স্থির করার জন্য আপনি কল্পনা করতে পারেন। সুতরাং শিরোনামগুলিতে ইনলাইন ফাংশনগুলি প্রয়োগ করা নিরাপদ। ক্লাস বা স্ট্রাক্ট সংজ্ঞায় ফাংশন বাস্তবায়নগুলি প্রায়শই সংকলক দ্বারা স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়।
অন্য ব্যতিক্রম টেম্পলেট। যেহেতু সংকলকটি ইনস্ট্যান্ট করার সময় পুরো টেম্পলেট ধরণের সংজ্ঞাটি দেখতে প্রয়োজন, তাই স্ট্যান্ডেলোন ফাংশন বা সাধারণ ক্লাসগুলির মতো সংজ্ঞা থেকে প্রয়োগটি ডিকুয়াল করা সম্ভব নয়। ঠিক আছে, সম্ভবত এখন এটি সম্ভব, তবে "রফতানি" কীওয়ার্ডটির জন্য বিস্তৃত সংকলক সমর্থন পেতে দীর্ঘ, দীর্ঘ সময় লেগেছে। সুতরাং 'রফতানির' সমর্থন ব্যতীত অনুবাদ ইউনিটগুলি ইনলাইন ফাংশনগুলি কীভাবে কাজ করে তার অনুরূপ তাত্ক্ষণিক টেম্পলেটযুক্ত ধরণের এবং ফাংশনগুলির নিজস্ব স্থানীয় অনুলিপিগুলি পেয়ে যায়। 'রফতানির' জন্য সমর্থন সহ, এটি ক্ষেত্রে নয়।
দুটি ব্যাতিক্রমের জন্য, কিছু লোকেরা .cpp ফাইলগুলিতে ইনলাইন ফাংশন, টেম্পলেটড ফাংশন এবং টেম্পলেটযুক্ত প্রকারের প্রয়োগগুলি এবং "ccp ফাইল অন্তর্ভুক্ত করার জন্য" ভাল "বলে মনে করেন। এটি শিরোনাম বা উত্স ফাইল সত্যই গুরুত্বপূর্ণ নয়; প্রিপ্রোসেসর যত্ন করে না এবং এটি কেবল একটি সম্মেলন।
সি ++ কোড (বেশ কয়েকটি ফাইল) থেকে সম্পূর্ণ প্রক্রিয়াটির একটি দ্রুত সংক্ষিপ্তসার এবং একটি চূড়ান্ত কার্যকর কার্যকর:
- প্রাক প্রসেসর চালানো হয়, যা সব নির্দেশনা যা '#' দিয়ে শুরু হয় parses। উদাহরণস্বরূপ # অন্তর্ভুক্ত নির্দেশিকা অন্তর্ভুক্ত ফাইলটি অন্তর্ভুক্ত করে। এটি ম্যাক্রো-প্রতিস্থাপন এবং টোকেন-আটকানোও করে।
- প্রকৃত সংকলক প্রিপ্রসেসর পর্যায়ে পরে মধ্যবর্তী পাঠ্য ফাইলে চলে এবং এসেম্বলারের কোডটি নির্গত করে।
- প্রতীকী ভাষান্তর সমাবেশ ফাইল এবং নিঃসরণ করে মেশিন কোড উপর রান, এই সাধারণত একটি বলা হয় অবজেক্ট ফাইল এবং প্রশ্নে অপারেটিভ সিস্টেম বাইনারি এক্সিকিউটেবল বিন্যাস অনুসরণ করে। উদাহরণস্বরূপ, উইন্ডোজ পিই (পোর্টেবল এক্সিকিউটেবল ফর্ম্যাট) ব্যবহার করে, অন্যদিকে লিনাক্স জিএনইউ এক্সটেনশন সহ ইউনিক্স সিস্টেম ভি ইএলএফ ফর্ম্যাটটি ব্যবহার করে। এই পর্যায়ে, চিহ্নগুলি এখনও অপরিজ্ঞাত হিসাবে চিহ্নিত করা হয়েছে।
- অবশেষে, লিঙ্কারটি চালানো হয়। পূর্ববর্তী সমস্ত পর্যায়গুলি প্রতিটি অনুবাদ ইউনিটে যথাযথভাবে চালিত হয়েছিল। তবে সংযোগকারী দ্বারা উত্পন্ন সমস্ত উত্পন্ন বস্তু ফাইলগুলিতে লিঙ্কার স্টেজ কাজ করে। লিঙ্কার প্রতীকগুলি সমাধান করে এবং বিভাগ এবং বিভাগগুলি তৈরি করার মতো প্রচুর যাদু করে যা লক্ষ্য প্ল্যাটফর্ম এবং বাইনারি ফর্ম্যাটের উপর নির্ভরশীল। প্রোগ্রামারদের সাধারণভাবে এটি জানার প্রয়োজন হয় না তবে এটি অবশ্যই কিছু ক্ষেত্রে সহায়তা করে।
আবার, এটি আপনি চেয়েছিলেন তার চেয়ে স্পষ্টতই বেশি, তবে আমি আশা করি যে কৌতুকপূর্ণ-কৌতুকপূর্ণ বিবরণ আপনাকে আরও বড় ছবি দেখতে সহায়তা করবে।