সি
enum stuff q;
enum stuff {a, b=-4, c, d=-2, e, f=-3, g} s;
s
সম্পূর্ণ প্রকার এবং ঘোষণার সাথে স্বাক্ষরিত পূর্ণসংখ্যার একটি অস্থায়ী সংজ্ঞা হিসাবে কাজ করে এমন ঘোষণা যা স্কোপগুলিতে q
অসম্পূর্ণ প্রকারের সাথে স্বাক্ষরিত পূর্ণসংখ্যার একটি অস্থায়ী সংজ্ঞা হিসাবে কাজ করে (যা সুযোগের সম্পূর্ণ ধরণের সমাধান করে কারণ প্রকারের সংজ্ঞাটি যে কোনও জায়গায় উপস্থিত রয়েছে সুযোগ) (যে কোনও স্থায়ী সংজ্ঞা, শনাক্তকারীদের মতো q
এবং s
একই ধরণের অসম্পূর্ণ বা সম্পূর্ণ সংস্করণ int
বা enum stuff
একাধিক বারের সাথে পুনরায় ঘোষিত করা যেতে পারে তবে কেবল স্কোপের মধ্যে একবার সংজ্ঞায়িত করা হয় যেমন int q = 3; এবং কেবলমাত্র একটি সাবস্কোপে নতুন সংজ্ঞা দেওয়া যেতে পারে, এবং সংজ্ঞা অনুসারে কেবল ব্যবহারযোগ্য)। এছাড়াও আপনি কেবল enum stuff
সুযোগের মধ্যে একবারের সম্পূর্ণ ধরণের ব্যবহার করতে পারেন কারণ এটি কোনও ধরণের সংজ্ঞা হিসাবে কাজ করে।
enum stuff
ফাইলের স্কোপে (পূর্বে এবং নীচে ব্যবহারযোগ্য) পাশাপাশি একটি ফরোয়ার্ড প্রকারের ঘোষণাপত্র ( enum stuff
টাইপটির একাধিক ঘোষণা থাকতে পারে তবে স্কোপে কেবল একটি সংজ্ঞা / সমাপ্তি এবং সাবস্কোপে নতুন সংজ্ঞা দেওয়া যেতে পারে ) এর জন্য একটি সংকলক গণনা প্রকার সংজ্ঞাও উপস্থিত রয়েছে for । এটি একটি কম্পাইলার নির্দেশ খেলোয়াড়রা হিসাবে কাজ করে a
rvalue সঙ্গে 0
, b
সঙ্গে -4
, c
সঙ্গে 5
, d
সঙ্গে -2
, e
সঙ্গে -3
, f
সঙ্গে -1
এবং g
সঙ্গে -2
বর্তমান সুযোগ। অঙ্কের ধ্রুবকগুলি এখন পৃথক এনামে পরবর্তী পুনর্নির্ধারণ পর্যন্ত সংজ্ঞার পরে প্রয়োগ হয় যা একই স্কোপ স্তরে থাকতে পারে না।
typedef enum bool {false, true} bool;
//this is the same as
enum bool {false, true};
typedef enum bool bool;
//or
enum bool {false, true};
typedef unsigned int bool;
//remember though, bool is an alias for _Bool if you include stdbool.h.
//and casting to a bool is the same as the !! operator
এনম, স্ট্রাক্ট এবং ইউনিয়ন দ্বারা ভাগ করা ট্যাগের নাম স্থানটি পৃথক এবং সি এর পরে কীওয়ার্ড (এনাম, স্ট্রাক্ট বা ইউনিয়ন) টাইপ দ্বারা উপসর্গ করা আবশ্যক enum a {a} b
, enum a c
অবশ্যই ব্যবহার করা উচিত এবং না a c
। কারণ ট্যাগ নেমস্পেস আইডেন্টিফায়ার নেমস্পেসের সাথে পৃথক, enum a {a} b
অনুমোদিত তবে enum a {a, b} b
এটি স্থির হয় না কারণ ধ্রুবকগুলি ভেরিয়েবল আইডেন্টিফায়ার, আইডেন্টিফায়ার নেমস্পেসের একই নামস্থানে থাকে। typedef enum a {a,b} b
এছাড়াও অনুমোদিত নয় কারণ টাইপিডেফ-নামগুলি শনাক্তকারী নেমস্পেসের অংশ।
enum bool
ধরণীর ধরণগুলি ধরণের ধীরে ধীরে সি তে নিম্নলিখিত ধরণগুলি অনুসরণ করে:
+--------------+-----+-----+-----+
| enum bool | a=1 |b='a'| c=3 |
+--------------+-----+-----+-----+
| unsigned int | int | int | int |
+--------------+-----+-----+-----+
+--------------+-----+-----+-----+
| enum bool | a=1 | b=-2| c=3 |
+--------------+-----+-----+-----+
| int | int | int | int |
+--------------+-----+-----+-----+
+--------------+-----+---------------+-----+
| enum bool | a=1 |b=(-)0x80000000| c=2 |
+--------------+-----+---------------+-----+
| unsigned int | int | unsigned int | int |
+--------------+-----+---------------+-----+
+--------------+-----+---------------+-----+
| enum bool | a=1 |b=(-)2147483648| c=2 |
+--------------+-----+---------------+-----+
| unsigned int | int | unsigned int | int |
+--------------+-----+---------------+-----+
+-----------+-----+---------------+------+
| enum bool | a=1 |b=(-)0x80000000| c=-2 |
+-----------+-----+---------------+------+
| long | int | long | int |
+-----------+-----+---------------+------+
+-----------+-----+---------------+------+
| enum bool | a=1 | b=2147483648 | c=-2 |
+-----------+-----+---------------+------+
| long | int | long | int |
+-----------+-----+---------------+------+
+-----------+-----+---------------+------+
| enum bool | a=1 | b=-2147483648 | c=-2 |
+-----------+-----+---------------+------+
| int | int | int | int |
+-----------+-----+---------------+------+
+---------------+-----+---------------+-----+
| enum bool | a=1 | b=99999999999 | c=1 |
+---------------+-----+---------------+-----+
| unsigned long | int | unsigned long | int |
+---------------+-----+---------------+-----+
+-----------+-----+---------------+------+
| enum bool | a=1 | b=99999999999 | c=-1 |
+-----------+-----+---------------+------+
| long | int | long | int |
+-----------+-----+---------------+------+
এটি সিতে সূক্ষ্ম সংকলন করে:
#include <stdio.h>
enum c j;
enum c{f, m} p;
typedef int d;
typedef int c;
enum c j;
enum m {n} ;
int main() {
enum c j;
enum d{l};
enum d q;
enum m y;
printf("%llu", j);
}
সি ++
সি ++ এ, এনামগুলিতে একটি প্রকার থাকতে পারে
enum Bool: bool {True, False} Bool;
enum Bool: bool {True, False, maybe} Bool; //error
এই পরিস্থিতিতে, ধ্রুবক এবং শনাক্তকারী সবার একই ধরণের, বুল থাকে এবং কোনও সংখ্যা সেই ধরণের দ্বারা প্রতিনিধিত্ব করতে না পারলে একটি ত্রুটি ঘটবে। হতে পারে = 2, যা একটি বুল নয়। এছাড়াও, সত্য, মিথ্যা এবং বুল ছোট ক্ষেত্রে হতে পারে না অন্যথায় তারা ভাষার কীওয়ার্ডগুলির সাথে সংঘর্ষ করবে। একটি এনামেও পয়েন্টার প্রকার থাকতে পারে না।
এনামগুলির নিয়মগুলি সি ++ এ আলাদা।
#include <iostream>
c j; //not allowed, unknown type name c before enum c{f} p; line
enum c j; //not allowed, forward declaration of enum type not allowed and variable can have an incomplete type but not when it's still a forward declaration in C++ unlike C
enum c{f, m} p;
typedef int d;
typedef int c; // not allowed in C++ as it clashes with enum c, but if just int c were used then the below usages of c j; would have to be enum c j;
[enum] c j;
enum m {n} ;
int main() {
[enum] c j;
enum d{l}; //not allowed in same scope as typedef but allowed here
d q;
m y; //simple type specifier not allowed, need elaborated type specifier enum m to refer to enum m here
p v; // not allowed, need enum p to refer to enum p
std::cout << j;
}
সি ++ এ এনাম ভেরিয়েবলগুলি কেবল স্বাক্ষরবিহীন পূর্ণসংখ্যাদি ইত্যাদি নয়, এগুলিও এনাম প্রকারের এবং কেবল এনামগুলিতে স্থায়ী নিয়োগ দেওয়া যেতে পারে। এটি তবে ফেলে দেওয়া যেতে পারে।
#include <stdio.h>
enum a {l} c;
enum d {f} ;
int main() {
c=0; // not allowed;
c=l;
c=(a)1;
c=(enum a)4;
printf("%llu", c); //4
}
এনাম ক্লাস
enum struct
অনুরূপ enum class
#include <stdio.h>
enum class a {b} c;
int main() {
printf("%llu", a::b<1) ; //not allowed
printf("%llu", (int)a::b<1) ;
printf("%llu", a::b<(a)1) ;
printf("%llu", a::b<(enum a)1);
printf("%llu", a::b<(enum class a)1) ; //not allowed
printf("%llu", b<(enum a)1); //not allowed
}
স্কোপ রেজোলিউশন অপারেটরটি এখনও স্কোডবিহীন এনামগুলিতে ব্যবহার করা যেতে পারে।
#include <stdio.h>
enum a: bool {l, w} ;
int main() {
enum a: bool {w, l} f;
printf("%llu", ::a::w);
}
তবে যেহেতু ডব্লিউটিকে স্কোপের অন্য কিছু হিসাবে সংজ্ঞায়িত করা যায় না, ::w
এবং এর মধ্যে কোনও পার্থক্য নেই::a::w