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

C-এ ম্যাক্রো এবং প্রিপ্রসেসর (Macros and Preprocessors)


C প্রিপ্রসেসর কম্পাইলারের অংশ নয়, বরং কম্পাইলেশন প্রসেসের একটি আলাদা ধাপ। সহজ ভাষায়, C প্রিপ্রসেসর একটি টেক্সট সাবস্টিটিউশন টুল যা কম্পাইল자에게 আসল কম্পাইলেশনের আগে প্রি-প্রসেসিং করার নির্দেশ দেয়। আমরা এটিকে CPP বলব।

সকল প্রিপ্রসেসর কমান্ড হ্যাশ সিম্বল (#) দিয়ে শুরু হয়। এটি প্রথম নন-ব্ল্যাঙ্ক ক্যারেক্টার হতে হয় এবং পঠনযোগ্যতার জন্য প্রথম কলাম থেকে শুরু হওয়া উচিত। গুরুত্বপূর্ণ প্রিপ্রসেসর ডিরেক্টিভগুলো নিচে:

Sr.No Directives & Descriptions
1#define
প্রিপ্রসেসর ম্যাক্রো সাবস্টিটিউট করে।
2#include
অন্য ফাইল থেকে হেডার ফাইল ইনসার্ট করে।
3#undef
প্রিপ্রসেসর ম্যাক্রো অনডিফাইন করে।
4#ifdef
ম্যাক্রো ডিফাইন থাকলে true রিটার্ন করে।
5#ifndef
ম্যাক্রো ডিফাইন না থাকলে true রিটার্ন করে।
6#if
কম্পাইল-টাইম কন্ডিশন টেস্ট করে।
7#else
#if-এর বিকল্প।
8#elif
#else এবং #if একসাথে।
9#endif
প্রিপ্রসেসর কন্ডিশনাল শেষ করে।
10#error
stderr-এ এরর মেসেজ প্রিন্ট করে।
11#pragma
কম্পাইল자에게 বিশেষ কমান্ড ইস্যু করে।

কিছু উদাহরণ:

#define MAX_ARRAY_LENGTH 20

এই ডিরেক্টিভ CPP-কে বলছে MAX_ARRAY_LENGTH-এর সকল প্রস্থান ২০ দিয়ে রিপ্লেস করুন। কনস্ট্যান্টের জন্য #define ব্যবহার করলে পঠনযোগ্যতা বাড়ে।

#include <stdio.h>
#include "myheader.h"

এগুলো CPP-কে বলছে সিস্টেম লাইব্রেরি থেকে stdio.h এবং লোকাল ডিরেক্টরি থেকে myheader.h নিয়ে করেন্ট সোর্স ফাইলে যোগ করুন।

#undef FILE_SIZE
#define FILE_SIZE 42

এটি বিদ্যমান FILE_SIZE অনডিফাইন করে এবং ৪২ হিসেবে ডিফাইন করে।

#ifndef MESSAGE
#define MESSAGE "You wish!"
#endif

MESSAGE যদি ইতিমধ্যে ডিফাইন না থাকে, তবে সেটি ডিফাইন করে।

#ifdef DEBUG
/* Your debugging statements here */
#endif

DEBUG ডিফাইন থাকলে এনক্লোজড স্টেটমেন্টগুলো প্রসেস করে। কম্পাইলেশনের সময় gcc-তে -DDEBUG ফ্ল্যাগ দিয়ে ডিবাগিং অন/অফ করা যায়।

প্রিডিফাইনড ম্যাক্রো (Predefined Macros)

ANSI C অনেক প্রিডিফাইনড ম্যাক্রো ডিফাইন করে। এগুলো প্রোগ্রামিং-এ ব্যবহার করা যায়, কিন্তু সরাসরি মডিফাই করা উচিত নয়।

Sr.No Macro & Descriptions
1__DATE__
"MMM DD YYYY" ফরম্যাটে বর্তমান তারিখ।
2__TIME__
"HH:MM:SS" ফরম্যাটে বর্তমান সময়।
3__FILE__
কারেন্ট ফাইলনেম স্ট্রিং লিটারেল হিসেবে।
4__LINE__
কারেন্ট লাইন নম্বর ডেসিমেল কনস্ট্যান্ট হিসেবে।
5__STDC__
ANSI স্ট্যান্ডার্ড মেনে চললে ১।

উদাহরণ

#include <stdio.h>
int main() {
    printf("File :%s\n", __FILE__ );
    printf("Date :%s\n", __DATE__ );
    printf("Time :%s\n", __TIME__ );
    printf("Line :%d\n", __LINE__ );
    printf("ANSI :%d\n", __STDC__ );
    return 0;
}

আউটপুট

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

  1. C++ প্রোগ্রাম এডিট, কম্পাইল এবং এক্সিকিউট করার পদ্ধতি

  2. C++-এ #define এবং const কিওয়ার্ডের পার্থক্য

  3. মাইক্রোসফট এক্সেলে ম্যাক্রো তৈরি ও চালানোর পূর্ণ গাইড

  4. পাইথনে ৩ ও ৭ এর গুণিতকের যোগফল দিয়ে সংখ্যা তৈরি করা সম্ভব কিনা