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