একটি সি ++ প্রোগ্রাম সংকলন তিনটি পদক্ষেপ জড়িত:
প্রাক প্রসেসিং: প্রিপ্রসেসর একটি সি ++ উত্স কোড ফাইল নেয় এবং #include
এস, #define
গুলি এবং অন্যান্য প্রাক প্রসেসর নির্দেশিকাগুলির সাথে ডিল করে । এই পদক্ষেপের আউটপুট প্রাক প্রসেসরের নির্দেশাবলী ছাড়াই একটি "খাঁটি" সি ++ ফাইল।
সংকলন: সংকলক প্রাক প্রসেসরের আউটপুট নেয় এবং এটি থেকে একটি অবজেক্ট ফাইল তৈরি করে।
লিঙ্কিং: লিঙ্কার সংকলক দ্বারা উত্পাদিত অবজেক্ট ফাইলগুলি নেয় এবং একটি লাইব্রেরি বা এক্সিকিউটেবল ফাইল তৈরি করে।
প্রাক-প্রক্রিয়াকরণ
প্রাক প্রসেসর পরিচালনা প্রাক প্রসেসর নির্দেশনা মতো #include
এবং #define
। এটি সি ++ এর সিনট্যাক্সের অজগনীয়, এজন্য এটি যত্ন সহ ব্যবহার করা আবশ্যক।
এটি একবারে #include
সম্পর্কিত ফাইলগুলির বিষয়বস্তু (যা সাধারণত কেবল ঘোষণা) এর সাথে ম্যাক্রোগুলি প্রতিস্থাপন করে ( #define
) ম্যাক্রোগুলি প্রতিস্থাপন করে #if
, #ifdef
এবং #ifndef
নির্দেশের উপর ভিত্তি করে পাঠ্যগুলির বিভিন্ন অংশ নির্বাচন করে একটি সি ++ উত্স ফাইলে কাজ করে ।
প্রিপ্রসেসর প্রোট্রোসেসিং টোকেনগুলির একটি স্ট্রিমে কাজ করে। ম্যাক্রো প্রতিস্থাপনটিকে টোকেনগুলি অন্য টোকেনের সাথে প্রতিস্থাপন হিসাবে সংজ্ঞায়িত করা হয় (অপারেটর ##
যখন এটি বোধগম্য হয় তখন দুটি টোকেন মার্জ করতে সক্ষম করে)।
এত কিছুর পরেও, প্রিপ্রসেসর একটি একক আউটপুট উত্পাদন করে যা উপরে বর্ণিত ট্রান্সফর্মেশনগুলির ফলে টোকেনের একটি প্রবাহ। এটি এমন কিছু বিশেষ চিহ্নিতকারী যুক্ত করেছে যা প্রতিটি লাইনটি কোথা থেকে এসেছে তা সংকলককে জানিয়ে দেয় যাতে এটি সেগুলিকে বুদ্ধিমান ত্রুটি বার্তা তৈরি করতে ব্যবহার করতে পারে।
নির্দেশাবলী #if
এবং চতুর চতুর ব্যবহারের সাথে এই পর্যায়ে কিছু ত্রুটি তৈরি করা যেতে পারে #error
।
সংকলন
সংকলন পদক্ষেপ প্রাক প্রসেসর প্রতিটি আউটপুট উপর সঞ্চালিত হয়। সংকলক খাঁটি সি ++ উত্স কোড (এখন কোনও প্রিপ্রোসেসর নির্দেশ ছাড়াই) পার্স করে এবং এ্যাসেম্বলি কোডে রূপান্তর করে। তারপরে অন্তর্নিহিত ব্যাক-এন্ড (টুলচেইনে এসেমব্লার) এর অনুরোধ জানায় যা সেই কোডটিকে মেশিন কোডে একত্রিত করে কিছু বিন্যাসে প্রকৃত বাইনারি ফাইল তৈরি করে (ELF, COFF, a.out, ...)। এই অবজেক্ট ফাইলে ইনপুটটিতে সংজ্ঞায়িত চিহ্নগুলির সংকলিত কোড (বাইনারি আকারে) রয়েছে। অবজেক্ট ফাইলে থাকা চিহ্নগুলি নাম দ্বারা উল্লেখ করা হয়।
অবজেক্ট ফাইলগুলি সংকেতগুলিকে বোঝাতে পারে যা সংজ্ঞায়িত হয় নি। আপনি যখন কোনও ঘোষণা ব্যবহার করেন এবং এর জন্য কোনও সংজ্ঞা সরবরাহ করেন না তখনই এটি হয় This সংকলকটি এতে কিছু মনে করে না, এবং উত্স ফাইলটি যতক্ষণ উত্স কোডটি সুবিন্যস্ত হয় ততক্ষণ আনবে।
সংকলকগণ সাধারণত এই সময়ে আপনাকে সংকলন বন্ধ করতে দেয়। এটি খুব দরকারী কারণ এটির সাথে আপনি প্রতিটি উত্স কোড ফাইল পৃথকভাবে সংকলন করতে পারেন। এটির সুবিধাটি হ'ল আপনি যদি কেবল একটি একক ফাইল পরিবর্তন করেন তবে আপনাকে সবকিছু পুনরায় সংকলনের প্রয়োজন হবে না ।
উত্পাদিত অবজেক্ট ফাইলগুলিকে আরও সহজে পুনরায় ব্যবহারের জন্য স্ট্যাটিক লাইব্রেরি নামক বিশেষ সংরক্ষণাগারে রাখা যেতে পারে।
এটি এই পর্যায়ে যে সিন্ট্যাক্স ত্রুটি বা ব্যর্থ ওভারলোড রেজোলিউশন ত্রুটির মতো "নিয়মিত" সংকলক ত্রুটিগুলি রিপোর্ট করা হয়।
সংযোগস্থাপন
লিঙ্কার হ'ল কম্পাইলার উত্পাদিত অবজেক্ট ফাইল থেকে চূড়ান্ত সংকলন আউটপুট উত্পাদন করে। এই আউটপুটটি একটি অংশীদারি (বা গতিশীল) লাইব্রেরি হতে পারে (এবং নামটি সমান হওয়ার সাথে সাথে তারা পূর্বে উল্লিখিত স্থির লাইব্রেরিগুলির সাথে খুব বেশি মিল খুঁজে পায়নি) বা একটি এক্সিকিউটেবল।
এটি সঠিক ঠিকানাগুলির সাথে অপরিবর্তিত প্রতীকগুলিকে রেফারেন্সগুলি প্রতিস্থাপন করে সমস্ত অবজেক্ট ফাইল যুক্ত করে। এই চিহ্নগুলির প্রত্যেকটিই অন্য অবজেক্ট ফাইল বা লাইব্রেরিতে সংজ্ঞায়িত করা যেতে পারে। যদি এগুলি স্ট্যান্ডার্ড লাইব্রেরি ছাড়া অন্য লাইব্রেরিতে সংজ্ঞায়িত করা হয় তবে আপনাকে লিঙ্কারটি তাদের সম্পর্কে বলা দরকার।
এই পর্যায়ে সর্বাধিক সাধারণ ত্রুটিগুলি হ'ল সংজ্ঞা বা সদৃশ সংজ্ঞা are পূর্ববর্তীটির অর্থ হ'ল হয় সংজ্ঞাগুলি বিদ্যমান নেই (যেমন সেগুলি লিখিত হয় না), বা যে বস্তুগুলি বা লাইব্রেরিগুলি তারা থাকে সেখানে লিঙ্কারকে দেওয়া হয়নি। পরবর্তীটি সুস্পষ্ট: একই প্রতীকটি দুটি পৃথক বস্তু ফাইল বা লাইব্রেরিতে সংজ্ঞায়িত করা হয়েছিল।