enum (Enumerated Data Type) কী?
enum কীওয়ার্ড দিয়ে প্রোগ্রামার নিজের কাস্টম ডেটা টাইপ তৈরি করতে পারেন, যেখানে ভেরিয়েবল নির্দিষ্ট কনস্ট্যান্ট ভ্যালু গুলোর মধ্য থেকে একটি ধারণ করতে পারে। এটি কোড পড়বোঝার সুবিধা বাড়ায় এবং ম্যাজিক নম্বর এড়াতে সাহায্য করে।
সিনট্যাক্স
enum tagname {
identifier1,
identifier2,
...
identifierN
};
ডিফল্ট ভ্যালু
- প্রথম আইডেন্টিফায়ার = ০
- পরেরগুলো ক্রমশः ১, ২, ৩... বেড়ে
- মানগুলো অনসাইনড ইন্টিজার
উদাহরণ ১: সপ্তাহের দিন
#include <stdio.h>
int main() {
enum week { mon, tue, wed, thu, fri, sat, sun };
printf("Monday = %d\n", mon); // 0
printf("Thursday = %d\n", thu); // 3
printf("Sunday = %d\n", sun); // 6
enum week today = wed;
printf("Today value: %d\n", today); // 2
return 0;
}
আউটপুট
Monday = 0 Thursday = 3 Sunday = 6 Today value: 2
কাস্টম ইনিশিয়াল ভ্যালু দেয়া
প্রথম আইডেন্টিফায়ারের মান নির্দিষ্ট করলে বাকিগুলো সেখান থেকে গণনা হয়।
#include <stdio.h>
int main() {
enum week { mon=1, tue, wed, thu, fri, sat, sun };
printf("Monday = %d\n", mon); // 1
printf("Thursday = %d\n", thu); // 4
printf("Sunday = %d\n", sun); // 7
return 0;
}
আউটপুট
Monday = 1 Thursday = 4 Sunday = 7
এনাম ভেরিয়েবল ডিক্লেয়ারেশন
enum week { mon, tue, wed, thu, fri, sat, sun };
enum week today; // বা সরাসরি enum week today = mon;
সুইচ-কেসে enum ব্যবহার (বেস্ট প্র্যাকটিস)
enum status { SUCCESS, FAILURE, PENDING };
void handle(enum status s) {
switch (s) {
case SUCCESS: printf("OK\n"); break;
case FAILURE: printf("Failed\n"); break;
case PENDING: printf("Waiting...\n"); break;
}
}
গুরুত্বপূর্ণ পয়েন্ট
- enum কনস্ট্যান্টস কম্পাইল-টাইম কনস্ট্যান্ট।
- এনাম ভেরিয়েবল ইন্টিজার হিসেবে আচরণ করে (অন্য ইন্টিজার অ্যাসাইন করা যায়, কিন্তু ডিসকারেজড)।
sizeof(enum)সাধারণতsizeof(int)সমান।- সি++-এ
enum class(স্কোপড এনাম) আছে, সি-তে নেই।