কম্পিউটার টিউটোরিয়াল

সি/সি++-এ প্রিপ্রসেসর কীভাবে কাজ করে? (How a Preprocessor works)


এখানে আমরা দেখব সি বা সি++-এ প্রিপ্রসেসর কীভাবে কাজ করে। প্রথমে জানি প্রিপ্রেসেসর কী।

প্রিপ্রসেসর হলো ডিরেক্টিভস (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
  1. C/C++-এ স্ট্রিং ইন্টিজার কিনা চেক করা

  2. C/C++-এ malloc() এবং free() কীভাবে কাজ করে?

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী?

  4. C++-এ #define প্রিপ্রসেসর কী?