كيفية استخدام التعداد في لغة سي

How Use Enum C Language



يستخدم برنامج enum في لغة البرمجة C لتحديد القيم الثابتة المتكاملة ، وهو أمر مفيد للغاية في كتابة برامج نظيفة وقابلة للقراءة. يستخدم المبرمجون عادةً التعداد لتحديد الثوابت المتكاملة المسماة في برامجهم لتوفير إمكانية قراءة أفضل للبرنامج وقابلية صيانته. ستناقش هذه المقالة التعداد بالتفصيل.

بناء الجملة

تعداد <اسم نوع التعداد> {
Enumeration_Constant_Element-1و
Enumeration_Constant_Element-2و
Enumeration_Constant_Element-3و
…… .........و
Enumeration_Constant_Element-نو
}؛

القيمة الافتراضية لـ Enumeration_Constant_Element-1 هي 0 ، وقيمة Enumeration_Constant_Element-2 هي 1 ، وقيمة Enumeration_Constant_Element-3 هي 2 ، وقيمة Enumeration_Constant_Element-n هي (n-1).







الغوص العميق في Enum

الآن ، بما أننا نعرف بناء الجملة لتحديد نوع التعداد ، فلنلقِ نظرة على مثال:



تعدادخطأ{
IO_ERRORو
القرصو
خطأ في الشبكة
}؛

يجب دائمًا استخدام الكلمة الأساسية للتعداد لتحديد نوع التعداد. لذلك ، عندما تريد تحديد نوع التعداد ، يجب عليك استخدام الكلمة الأساسية للتعداد من قبل. بعد الكلمة الأساسية للتعداد ، يجب عليك استخدام معرّف صالح لتعريف.



في المثال أعلاه ، سيقوم المترجم بتعيين IO_ERROR للقيمة التكاملية: 0 ، DISK_ERROR للقيمة المتكاملة: 1 و NETWORK_ERROR للقيمة التكاملية: 2. بشكل افتراضي ، يتم دائمًا تعيين أول عنصر تعداد القيمة 0 ، التالي يتم تعيين القيمة 1 لعنصر التعداد ، وهكذا.





يمكن تغيير هذا السلوك الافتراضي إذا لزم الأمر عن طريق تعيين قيمة ثابتة ثابتة بشكل صريح ، على النحو التالي:

تعدادخطأ{
IO_ERROR= 2و
القرصو
خطأ في الشبكة= 8 و
PRINT_ERROR
}؛

في هذه الحالة ، يتم تعيين IO_ERROR بشكل صريح إلى قيمة 2 بواسطة المبرمج ، ويتم تعيين DISK_ERROR إلى القيمة 3 بواسطة المترجم ، ويتم تعيين NETWORK_ERROR بشكل صريح إلى القيمة 8 بواسطة المبرمج ، ويتم تعيين PRINT_ERROR إلى القيمة التالية القيمة المتكاملة لعنصر التعداد السابق NETWORK_ERROR (أي 9) بواسطة المترجم.



إذن ، أنت الآن تفهم كيفية تحديد نوع التعداد المحدد من قبل المستخدم في C. هل من الممكن التصريح عن متغير من نوع التعداد (كما يمكننا التصريح عن متغير من نوع عدد صحيح)؟ نعم إنه كذلك! يمكنك التصريح عن متغير التعداد كما يلي:

تعدادخطأ Hw_Error؛

مرة أخرى ، enum هي الكلمة الأساسية هنا ، والخطأ هو نوع التعداد ، و Hw_Error هو متغير تعداد.

سننظر الآن في الأمثلة التالية لفهم الاستخدامات المختلفة لـ enum:

  • مثال 1: استخدام تعريف التعداد الافتراضي
  • مثال 2: استخدام تعريف التعداد المخصص
  • مثال 3: تعداد التعريف باستخدام التعبير الثابت
  • مثال 4: نطاق التعداد

مثال 1: استخدام تعريف التعداد الافتراضي

في هذا المثال ، ستتعلم كيفية تحديد نوع التعداد بقيم ثابتة افتراضية. سيهتم المترجم بتعيين القيم الافتراضية لعناصر التعداد. أدناه ، سترى مثال البرنامج والمخرجات المقابلة.

#يشمل

/ * تحديد نوع التعداد * /
تعدادخطأ{
IO_ERRORو
القرصو
خطأ في الشبكة
}؛

intالأساسية()
{
تعدادخطأ Hw_Error؛ / * تكوين متغير التعداد * /

printf (تعيين Hw_Error على IO_ERRORن')؛
Hw_Error=IO_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على DISK_ERRORن')؛
Hw_Error=القرص؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على NETWORK_ERRORن')؛
Hw_Error=خطأ في الشبكة؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

إرجاع 0؛
}

https://lh6.googleusercontent.com/0CHtUqkuIA-okDEPI0_5fZLU6lZ6Exz6DK4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBWoiMOhzApzXey4uUr63k5Ros863eqC-HmrvZ_LZBKbEvqeCVMCsnvXXhfrYJrBaxxfZBVoiMOhzAQPzXey4

مثال 2: استخدام تعريف التعداد المخصص

في هذا المثال ، ستتعلم كيفية تحديد نوع التعداد بقيمة ثابتة مخصصة. سيساعدك هذا المثال أيضًا على فهم كيفية تهيئة الثوابت المخصصة بأي ترتيب عشوائي. في هذا المثال ، حددنا صراحة القيمة الثابتة لـ 1شارعو 3بحث وتطويرتعداد العناصر (على سبيل المثال ، IO_ERROR و NETWORK_ERROR ، على التوالي) ، لكننا تخطينا التهيئة الصريحة لـ 2اختصار الثانيو 4ذعناصر. أصبح من مسؤولية المترجم الآن تعيين القيم الافتراضية لـ 2اختصار الثانيو 4ذتعداد العناصر (على سبيل المثال ، DISK_ERROR و PRINT_ERROR ، على التوالي). سيتم تعيين DISK_ERROR إلى القيمة 3 وسيتم تعيين PRINT_ERROR إلى القيمة 9. أدناه ، سترى مثال البرنامج والإخراج.

#يشمل

/ * تحديد نوع التعداد - تهيئة مخصصة * /
تعدادخطأ{
IO_ERROR= 2و
القرصو
خطأ في الشبكة= 8و
PRINT_ERROR
}؛

intالأساسية()
{

/ * إعلان متغير التعداد * /
تعدادخطأ Hw_Error؛

printf (تعيين Hw_Error على IO_ERRORن')؛
Hw_Error=IO_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على DISK_ERRORن')؛
Hw_Error=القرص؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على NETWORK_ERRORن')؛
Hw_Error=خطأ في الشبكة؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على PRINT_ERRORن')؛
Hw_Error=PRINT_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

إرجاع 0؛
}

https://lh6.

مثال 3: تعريف التعداد باستخدام التعبير الثابت

في هذا المثال ، ستتعلم كيفية استخدام التعبير الثابت لتحديد القيمة الثابتة لعناصر التعداد.

#يشمل

/ * تحديد نوع التعداد - تهيئة مخصصة باستخدام تعبير ثابت
يتم استخدام التعبير الثابت هنا في حالة:
أ. IO_ERROR و
ب. خطأ في الشبكة
هذه طريقة غير معتادة لتحديد عناصر التعداد ؛ ومع ذلك، هذا
يوضح البرنامج أن طريقة تهيئة عناصر التعداد هذه ممكنة في c.
* /


تعدادخطأ{
IO_ERROR= 1 + 2 * 3 + 4و
القرصو
خطأ في الشبكة= 2 == 2و
PRINT_ERROR
}؛

intالأساسية()
{

/ * إعلان متغير التعداد * /
تعدادخطأ Hw_Error؛

printf (تعيين Hw_Error على IO_ERRORن')؛
Hw_Error=IO_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على DISK_ERRORن')؛
Hw_Error=القرص؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على NETWORK_ERRORن')؛
Hw_Error=خطأ في الشبكة؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على PRINT_ERRORن')؛
Hw_Error=PRINT_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

إرجاع 0؛
}

https://lh4.googleusercontent.com/9FAbPOnM95LiP_UQvg40oHSW4sv34aqpFgasbHMiy06Z_rKEom81TuMCVsfxWaZedtQOMEQx7ef_5qEfRVcNrUvhitDzOcTvOilby4hUvhitDzOcTvOilby4hUvhitDzOcTvOilby4hUvhit

مثال 4: نطاق التعداد

في هذا المثال ، ستتعلم كيفية عمل قاعدة تحديد النطاق لـ enum. كان من الممكن استخدام MACRO (#define) لتعريف ثابت بدلاً من التعداد ، لكن قاعدة تحديد النطاق لا تعمل مع MACRO.

#يشمل

intالأساسية()
{

/ * تحديد نوع التعداد * /
تعدادخطأ_1{
IO_ERROR= 10و
القرصو
خطأ في الشبكة= 3و
PRINT_ERROR
}؛


{

/ * تحديد نوع التعداد في النطاق الداخلي * /
تعدادخطأ_1{
IO_ERROR= عشرينو
القرصو
خطأ في الشبكة= 35و
PRINT_ERROR
}؛

/ * إعلان متغير التعداد * /
تعدادخطأ_1 Hw_Error؛
printf (تعيين Hw_Error على IO_ERRORن')؛
Hw_Error=IO_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على DISK_ERRORن')؛
Hw_Error=القرص؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على NETWORK_ERRORن')؛
Hw_Error=خطأ في الشبكة؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛

printf ('نضبط Hw_Error على PRINT_ERRORن')؛
Hw_Error=PRINT_ERROR؛
printf ('قيمة Hw_Error =٪ dن'وHw_Error)؛
}
إرجاع 0؛
}

مقارنة بين التعداد والماكرو

تعداد دقيق
قاعدة تحديد النطاق قابلة للتطبيق على التعداد. لا تنطبق قاعدة تحديد النطاق على الماكرو.
يحدث تعيين قيمة التعداد الافتراضي تلقائيًا.

Enum مفيد جدًا في تحديد عدد كبير من الثوابت. يأخذ المترجم تهيئة القيمة الثابتة الافتراضية.

يجب دائمًا ذكر قيم الماكرو الثابتة بوضوح من قبل المبرمج.

قد تكون هذه عملية مملة لعدد كبير من الثوابت حيث يجب على المبرمج دائمًا تحديد كل قيمة ثابتة يدويًا أثناء تحديد الماكرو.

استنتاج

يمكن اعتبار برنامج enum في C طريقة اختيارية للبرامج المستقلة أو المشاريع الصغيرة حيث يمكن للمبرمجين دائمًا استخدام الماكرو بدلاً من التعداد. ومع ذلك ، يميل المبرمجون المتمرسون إلى استخدام التعداد على الماكرو لمشاريع تطوير البرمجيات واسعة النطاق. هذا يساعد في كتابة برامج نظيفة ومقروءة.