سؤال

هو enum اكتب موقعة أو غير موقعة؟ هل تختلف توقيع التعداد في C/C99/ANSI C/C ++/C ++ X/GNU C/GNU C99؟

شكرًا

هل كانت مفيدة؟

المحلول

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

يمكنك فرض التعداد ليتم تمثيله بنوع موقّع من خلال إعطاء أحد العدادات قيمة سلبية:

enum SignedEnum { a = -1 };

في C ++ 0x ، يمكن تحديد النوع الأساسي من التعداد بشكل صريح:

enum ShortEnum : short { a };

(C ++ 0x يضيف أيضًا دعمًا للتعدادات المنتشر)

للاكتمال ، سأضيف ذلك في لغة البرمجة C ، الطبعة الثانية., ، يتم تحديد العدادات على أنها نوع int (ص 215). K&R ليس معيار C ، بحيث لا يكون ذلك معياريًا بالنسبة لمرسلات ISO C ، ولكنه يسبق معيار ISO C ، لذلك فهو مثير للاهتمام على الأقل من وجهة نظر تاريخية.

نصائح أخرى

هذا سؤال قديم ... لكنني اكتشفت هذا:

typedef unsigned ENUMNAME;  // this makes it unsigned in MSVC C 2015
typedef enum {v0, v1, v2, v3} ENUMNAME;

يمكنك استخدامه كفهرس غير موقّع 2 بت ، على سبيل المثال:

typedef struct {
  ENUMNAME i:2;
} STRUCTNAME;

جربته في ARM في مجلس التعاون الخليجي - لا يعمل.
أيضا ، يعرض Windbg structname.i ك رقم, ، ليس كما V0-V3.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top