প্রিপ্রোসেসর সম্পর্কিত অনেক বিভ্রান্তি আছে বলে মনে হচ্ছে।
সংকলক যখন এটি দেখে তখন এটি কী করে #include
যে এটি সেই লাইনটি অন্তর্ভুক্ত ফাইলগুলির বিষয়বস্তুর সাথে প্রতিস্থাপন করে, কোনও প্রশ্ন জিজ্ঞাসা করা হয়নি।
সুতরাং আপনার যদি a.h
এই বিষয়বস্তুগুলির সাথে কোনও ফাইল থাকে:
typedef int my_number;
এবং b.c
এই বিষয়বস্তু সহ একটি ফাইল :
#include "a.h"
#include "a.h"
ফাইলটি b.c
সংকলনের আগে প্রিপ্রসেসর দ্বারা অনুবাদ করা হবে
typedef int my_number;
typedef int my_number;
টাইপটি my_number
দু'বার সংজ্ঞায়িত করার কারণে এটি একটি সংকলক ত্রুটির ফলস্বরূপ । সংজ্ঞা একই হলেও এটি সি ভাষা দ্বারা অনুমোদিত নয়।
যেহেতু একটি শিরোনাম প্রায়শই একাধিক স্থানে ব্যবহৃত হয় রক্ষকরা সাধারণত সিতে ব্যবহৃত হয় এটি এরকম দেখাচ্ছে:
#ifndef _a_h_included_
#define _a_h_included_
typedef int my_number;
#endif
b.c
প্রিপ্রোসেসড হওয়ার পরে ফাইলটিতে এখনও শিরোনামের পুরো বিষয়বস্তু থাকবে twice তবে দ্বিতীয় উদাহরণটিকে উপেক্ষা করা হবে কারণ ম্যাক্রো _a_h_included_
ইতিমধ্যে সংজ্ঞায়িত করা হত।
এটি সত্যই ভাল কাজ করে, তবে দুটি ত্রুটি রয়েছে। সবার আগে অন্তর্ভুক্ত রক্ষীদের লিখতে হবে, এবং ম্যাক্রোর নাম প্রতিটি শিরোনামে আলাদা হতে হবে। এবং দ্বিতীয়ত সংকলকটিতে এখনও শিরোনামের ফাইলটি সন্ধান করা এবং এটি অন্তর্ভুক্ত হওয়ার সাথে সাথে এটি পড়তে হবে।
অবজেক্টিভ-সিতে #import
প্রিপ্রসেসর নির্দেশাবলী রয়েছে (এটি কিছু সংকলক এবং বিকল্পগুলির সাথে সি এবং সি ++ কোডের জন্যও ব্যবহার করা যেতে পারে)। এটি প্রায় একই রকম করে #include
তবে এটি অভ্যন্তরীণভাবে নোট করে যে কোনও ফাইলটি ইতিমধ্যে অন্তর্ভুক্ত করা হয়েছে। #import
লাইন শুধুমাত্র প্রথম সময় এটি সম্মুখীন হয় নামে ফাইলের বিষয়বস্তু দ্বারা প্রতিস্থাপিত হয়। প্রতিবারের পরে এটি কেবল উপেক্ষা করা হবে।