یک نوع شمارشی یک نوع صحیح است که توسط کاربر مشخص میشود. نحو تعریف یک نوع شمارشی به شکل زیر است:
{enum typename{enumerator-list
که enum کلمهای کلیدی است، typename نام نوع جدید است که کاربر مشخص میکند و enumerator-list مجموعه مقادیری است که این نوع جدید میتواند داشته باشد.
به عنوان مثال به تعریف زیر دقت کنید:
{enum Day{SAT,SUN,MON,TUE,WED,THU,FRI
حالا Day یک نوع جدید است و متغیرهایی که از این نوع تعریف میشوند میتوانند یکی از مقادیر SAT و SUN و MON و TUE و WED و THU و FRI را داشته باشند.
;Day day1,day2
;day1 = MON
;day2 = THU
وقتی نوع جدید Day و محدودۀ مقادیرش را تعیین کردیم، میتوانیم متغیرهایی از این نوع جدید بسازیم. در کد بالا متغیرهای day1 و day2 از نوع Day تعریف شدهاند. آنگاه day1 با مقدار MON و day2 با مقدار THU مقداردهی شده است.
مقادیر SAT و SUN و ... هر چند که به همین شکل به کار میروند اما در کامپیوتر به شکل اعداد صحیح 0 و 1 و 2 و ... ذخیره میشوند. به همین دلیل است که به هر یک از مقادیر SAT و SUN و ... یک شمارشگر میگویند. میتوان مقادیر صحیح دلخواهی را به شمارشگرها نسبت داد:
{enum Day{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI=64
اگر فقط بعضی از شمارشگرها مقداردهی شوند، آنگاه سایر شمارشگرها که مقداردهی نشدهاند مقادیر متوالی بعدی را خواهند گرفت:
{enum Day{SAT=1,SUN,MON,TUE,WED,THU,FRI
دستور بالا مقادیر 1 تا 7 را به ترتیب به روزهای هفته تخصیص خواهد داد. همچنین دو یا چند شمارشگر در یک فهرست میتوانند مقادیر یکسانی داشته باشند:
{enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1
آخر این که نام شمارشگرها نباید به عنوان نام متغیرهای دیگر در جاهای دیگر برنامه استفاده شود. مثلا:
{enum Score{A,B,C,D
;float B
;char c
در تعریفهای بالا B و C را نباید به عنوان نام متغیرهای دیگر به کار برد زیرا این نامها در نوع شمارشی Score به کار رفته است. شمارشگرهای همنام نباید در محدودههای مشترک استفاده شوند. برای مثال تعریفهای زیر را در نظر بگیرید:
{enum Score{A,B,C,D
{enum Group{AB,B,BC
دو تعریف بالا غیرمجاز است زیرا شمارشگر B در هر دو تعریف Score و Group آمده است. انواع شمارشی برای تولید کد «خود مستند» به کار میروند، یعنی کدی که به راحتی درک شود و نیاز به توضیحات اضافی نداشته باشد. مثلا تعاریف زیر خودمستند هستند زیرا به راحتی نام و نوع کاربرد و محدودۀ مقادیرشان درک میشود:
{enum Color{RED,GREEN,BLUE,BLACK,ORANGE
{enum Time{SECOND,MINUTE,HOUR
{enum Date{DAY,MONTH,YEAR
{enum Language{C,DELPHI,JAVA,PERL
{enum Gender{MALE,FEMALE