Aracılığıyla paylaş


C numaralandırma bildirimleri

Numaralandırma, adlandırılmış tamsayı sabitleri kümesinden oluşur. Numaralandırma türü bildirimi, (isteğe bağlı) numaralandırma etiketinin adını verir. Ayrıca adlandırılmış tamsayı tanımlayıcıları kümesini ( numaralandırma kümesi, numaralandırıcı sabitleri, numaralandırıcılar veya üyeler olarak adlandırılır) tanımlar. Numaralandırma türünün bir değişkeni, bu tür tarafından tanımlanan sabit listesi kümesinin değerlerinden birini depolar.

Türdeki değişkenler enum , ifadeleri dizinlemede ve tüm aritmetik ve ilişkisel işleçlerin işlenenleri olarak kullanılabilir. Numaralandırmalar, önişlemci yönergesine #define alternatif olarak değerlerin sizin için oluşturulabileceği ve normal kapsam kurallarına uyabileceği avantajları sağlar.

ANSI C'de, bir numaralandırıcı sabitinin değerini tanımlayan ifadeler her zaman türe sahiptir int . Bu, bir numaralandırma değişkeniyle ilişkili depolama alanının tek int bir değer için gereken depolama alanı olduğu anlamına gelir. Numaralandırma sabiti veya numaralandırılmış tür değeri, C dilinin tamsayı ifadesine izin verebildiği her yerde kullanılabilir.

Syntax

enum-specifier:
enumidentifierTercih{enumerator-list}
enum identifier

enumerator-list:
enumerator
enumerator-list , enumerator

enumerator:
enumeration-constant
enumeration-constant = constant-expression

enumeration-constant:
identifier

İsteğe bağlı identifier olarak, tarafından tanımlanan numaralandırma türünü adlandırın enumerator-list. Bu tanımlayıcı genellikle liste tarafından belirtilen numaralandırmanın "etiketi" olarak adlandırılır. Tür tanımlayıcısı identifier , burada görüldüğü gibi, terim dışı tarafından belirtilen numaralandırmanın enumerator-list etiketi olduğunu bildirir:

enum identifier
{
    // enumerator-list
}

, enumerator-list numaralandırma kümesinin üyelerini tanımlar.

Bir etiketin bildirimi görünür durumdaysa, daha sonra etiketi kullanan ancak atlayan enumerator-list bildirimler, önceden bildirilen numaralandırılmış türü belirtir. Etiketin tanımlı bir numaralandırma türüne başvurması ve bu numaralandırma türünün geçerli kapsamda olması gerekir. Numaralandırma türü başka bir yerde tanımlandığından enumerator-list , bu bildirimde görünmez. Numaralandırma türleri için sabit listelerinden ve typedef bildirimlerinden türetilen türlerin bildirimleri, numaralandırma türü tanımlanmadan önce numaralandırma etiketini kullanabilir.

Bir enumerator-list içindeki her enumeration-constant biri, numaralandırma kümesinin bir değerini adlandırın. Varsayılan olarak, ilk enumeration-constant değer 0 değeriyle ilişkilendirilir. Listede bir sonraki enumeration-constant , başka bir değerle açıkça ilişkilendirmediğiniz sürece ( constant-expression + 1 ) değeriyle ilişkilendirilir. adı enumeration-constant değeriyle eşdeğerdir.

Varsayılan değer dizisini geçersiz kılmak için kullanabilirsiniz enumeration-constant = constant-expression . Başka bir ifadeyle, içinde enumeration-constantenumerator-listgörünürse enumeration-constant = constant-expression değeri tarafından constant-expressionverilen değerle ilişkilendirilir. constant-expression türüne sahip int olmalıdır ve negatif olabilir.

Aşağıdaki kurallar bir numaralandırma kümesinin üyeleri için geçerlidir:

  • Sabit listesi kümesi yinelenen sabit değerler içerebilir. Örneğin, 0 değerini aynı kümedeki ve zeroadlı null üyeler gibi iki farklı tanımlayıcıyla ilişkilendirebilirsiniz.

  • Numaralandırma listesindeki tanımlayıcılar, aynı görünürlüğe sahip aynı kapsamdaki diğer tanımlayıcılardan farklı olmalıdır. Bu, diğer numaralandırma listelerindeki sıradan değişken adlarını ve tanımlayıcıları içerir.

  • Numaralandırma etiketleri normal kapsam kurallarına uyar. Aynı görünürlüğe sahip diğer numaralandırma, yapı ve birleşim etiketlerinden ayrı olmalıdır.

Örnekler

Bu örnekler numaralandırma bildirimlerini gösterir:

enum DAY            /* Defines an enumeration type    */
{
    saturday,       /* Names day and declares a       */
    sunday = 0,     /* variable named workday with    */
    monday,         /* that type                      */
    tuesday,
    wednesday,      /* wednesday is associated with 3 */
    thursday,
    friday
} workday;

0 değeri varsayılan olarak ile saturday ilişkilendirilir. Tanımlayıcı sunday açıkça 0 olarak ayarlanır. Kalan tanımlayıcılara varsayılan olarak 1 ile 5 arasında değerler verilir.

Bu örnekte, değişkenine todaykümesinden DAY bir değer atanır.

enum DAY today = wednesday;

Sabit listesi sabitinin adı değeri atamak için kullanılır. DAY Numaralandırma türü önceden bildirildiğinden yalnızca numaralandırma etiketi DAY gereklidir.

Numaralandırılmış veri türünün değişkenine açıkça bir tamsayı değeri atamak için tür ataması kullanın:

workday = ( enum DAY ) ( day_value - 1 );

Bu atama C dilinde önerilir ancak gerekli değildir.

enum BOOLEAN  /* Declares an enumeration data type called BOOLEAN */
{
    false,     /* false = 0, true = 1 */
    true
};

enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */

Bu bildirim olarak da belirtilebilir

enum BOOLEAN { false, true } end_flag, match_flag;

veya

enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;

Bu değişkenleri kullanan bir örnek şöyle görünebilir:

if ( match_flag == false )
    {
     .
     .   /* statement */
     .
    }
    end_flag = true;

Adsız numaralandırıcı veri türleri de bildirilebilir. Veri türünün adı atlanır, ancak değişkenler bildirilebilir. değişkeni response , tanımlanan türdeki bir değişkendir:

enum { yes, no } response;

Ayrıca bkz.

Listelemeler