এখানে আমরা দেখব সি বা সি++-এ প্রিপ্রসেসর কীভাবে কাজ করে। প্রথমে জানি প্রিপ্রেসেসর কী।
প্রিপ্রসেসর হলো ডিরেক্টিভস (directives) যা কম্পাইলারকে আসল কম্পাইলেশন শুরু হওয়ার আগে ইনফরমেশন প্রিপ্রসেস করার নির্দেশ দেয়।
সभी প্রিপ্রসেসর ডিরেক্টিভ # দিয়ে শুরু হয়, এবং একটি লাইনে প্রিপ্রসেসর ডিরেক্টিভের আগে শুধু হোয়াইটস্পেস ক্যারেক্টার থাকতে পারে। প্রিপ্রসেসর ডিরেক্টিভস সি++ স্টেটমেন্ট নয়, তাই সেগুলো সেমিকোলন (;) দিয়ে শেষ হয় না।
আপনি সব উদাহরণে #include ডিরেক্টিভ দেখেছেন। এই ম্যাক্রোটি একটি হেডার ফাইলকে সোর্স ফাইলে ইনক্লুড করতে ব্যবহৃত হয়।
সি++-এ অনেক প্রিপ্রসেসর ডিরেক্টিভ আছে যেমন #include, #define, #if, #else, #line ইত্যাদি। গুরুত্বপূর্ণ কিছু ডিরেক্টিভ নিচে দেওয়া হলো:
#define প্রিপ্রসেসর
#define প্রিপ্রসেসর ডিরেক্টিভ সিম্বলিক কostante তৈরি করে। সিম্বলিক কostanteকে ম্যাক্রো বলা হয় এবং ডিরেক্টিভের সাধারণ ফর্ম:
#define macro-name replacement-text
উদাহরণ
#include <iostream>
using namespace std;
#define PI 3.14159
int main() {
cout << "Value of PI :" << PI << endl;
return 0;
}
আউটপুট
Value of PI :3.14159
কন্ডিশনাল কম্পাইলেশন (Conditional Compilations)
প্রোগ্রামের সোর্স কোডের বেছে নেওয়া অংশ কম্পাইল করার জন্য কিছু ডিরেক্টিভ আছে। এই প্রক্রিয়াকে কন্ডিশনাল কম্পাইলেশন বলা হয়।
কন্ডিশনাল প্রিপ্রসেসর কনস্ট্রাক্ট 'if' সিলেকশন স্ট্রাকচারের মতো। নিচের প্রিপ্রসেসর কোড বিবেচনা করুন:
#ifndef NULL #define NULL 0 #endif
আপনি ডিবাগিং উদ্দেশ্যে প্রোগ্রাম কম্পাইল করতে পারেন। একটি ম্যাক্রো দিয়ে ডিবাগিং অন/অফ করতে পারেন:
#ifdef DEBUG cerr << "Variable x = " << x << endl; #endif
যদি DEBUG সিম্বলিক কostante #ifdef DEBUG ডিরেক্টিভের আগে ডিফাইন করা থাকে, তবে cerr স্টেটমেন্ট প্রোগ্রামে কম্পাইল হবে। আপনি #if 0 স্টেটমেন্ট ব্যবহার করে প্রোগ্রামের একটি অংশ কমেন্ট আউট করতে পারেন:
#if 0 code prevented from compiling #endif
উদাহরণ
#include <iostream>
using namespace std;
#define DEBUG
#define MIN(a,b) (((a)<(b)) ? a : b)
int main() {
int i, j;
i = 100;
j = 30;
#ifdef DEBUG
cerr << "Trace: Inside main function" << endl;
#endif
#if 0
/* This is commented part */
cout << MKSTR(HELLO C++) << endl;
#endif
cout << "The minimum is " << MIN(i, j) << endl;
#ifdef DEBUG
cerr << "Trace: Coming out of main function" << endl;
#endif
return 0;
}
আউটপুট
Trace: Inside main function The minimum is 30 Trace: Coming out of main function