C Dilinde enum nasıl kullanılır

How Use Enum C Language



C programlama dilindeki enum programı, temiz ve okunabilir programlar yazmada çok yardımcı olan integral sabit değerleri tanımlamak için kullanılır. Programcılar normalde, yazılımın daha iyi okunabilirliğini ve sürdürülebilirliğini sağlamak için programlarında adlandırılmış integral sabitlerini tanımlamak için numaralandırmayı kullanır. Bu makale enum'u ayrıntılı olarak tartışacaktır.

Sözdizimi

Sıralama <Numaralandırma Türü Adı> {
Numaralandırma_Constant_Element-1,
Numaralandırma_Constant_Element-2,
Numaralandırma_Constant_Element-3,
…… .........,
Numaralandırma_Constant_Element-n,
};

Enumeration_Constant_Element-1'in varsayılan değeri 0'dır, Enumeration_Constant_Element-2'nin değeri 1'dir, Enumeration_Constant_Element-3'ün değeri 2'dir ve Enumeration_Constant_Element-n'nin değeri (n-1)'dir.







Enum'a Derin Bakış

Şimdi, numaralandırma türünü tanımlamak için sözdizimini bildiğimize göre, bir örneğe bakalım:



SıralamaHata{
IO_ERROR,
DİSK HATASI,
AĞ HATASI
};

Enum anahtar sözcüğü, numaralandırma türünü tanımlamak için her zaman kullanılmalıdır. Bu nedenle, bir numaralandırma türü tanımlamak istediğinizde, önce enum anahtar sözcüğünü kullanmalısınız. enum anahtar sözcüğünden sonra, .



Yukarıdaki örnekte, derleyici integral değerine IO_ERROR: 0, DISK_ERROR'ı integral değerine: 1 ve NETWORK_ERROR'ı integral değerine atayacaktır: 2. Varsayılan olarak, ilk numaralandırma elemanına her zaman 0 değeri atanır, sonraki enum-element öğesine 1 değeri atanır ve bu böyle devam eder.





Bu varsayılan davranış, gerekirse, sabit integral değeri açıkça aşağıdaki gibi atanarak değiştirilebilir:

SıralamaHata{
IO_ERROR= 2,
DİSK HATASI,
AĞ HATASI= 8 ,
PRINT_ERROR
};

Bu durumda, IO_ERROR, programcı tarafından açıkça 2 değerine, DISK_ERROR, derleyici tarafından 3 değerine, NETWORK_ERROR, programcı tarafından 8 değerine açıkça atanır ve PRINT_ERROR, bir sonraki değere atanır. derleyici tarafından önceki NETWORK_ERROR (yani, 9) enum öğesinin integral değeri.



Artık C'de kullanıcı tanımlı bir numaralandırma tipinin nasıl tanımlanacağını anlıyorsunuz. Enum tipinde bir değişken bildirmek mümkün mü (tamsayı tipinde bir değişken bildirebileceğimiz gibi)? Evet öyle! Enum değişkenini aşağıdaki gibi bildirebilirsiniz:

SıralamaHata Hw_Error;

Yine, enum buradaki anahtar kelimedir, Error enum türüdür ve Hw_Error bir enum değişkenidir.

Şimdi enum'un çeşitli kullanımlarını anlamak için aşağıdaki örneklere bakacağız:

  • Örnek 1: Varsayılan numaralandırma tanımı kullanımı
  • Örnek 2: Özel numaralandırma tanımı kullanımı
  • Örnek 3: sabit ifade kullanarak numaralandırma tanımı
  • Örnek 4: enum kapsamı

Örnek 1: Varsayılan numaralandırma Tanım Kullanım

Bu örnekte, numaralandırma türünü varsayılan sabit değerlerle nasıl tanımlayacağınızı öğreneceksiniz. Derleyici, enum öğelerine varsayılan değerleri atamakla ilgilenecektir. Aşağıda örnek programı ve ilgili çıktıyı göreceksiniz.

#Dahil etmek

/* Enum türünü tanımlayın */
SıralamaHata{
IO_ERROR,
DİSK HATASI,
AĞ HATASI
};

intana()
{
SıralamaHata Hw_Error; /* enum değişkeni yaratılıyor*/

baskı ('Hw_Error'ı IO_ERROR olarak ayarlama ');
Hw_Error=IO_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı DISK_ERROR olarak ayarlama ');
Hw_Error=DİSK HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı NETWORK_ERROR olarak ayarlama ');
Hw_Error=AĞ HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

dönüş 0;
}

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

Örnek 2: Özel enum Tanımı Kullanımı

Bu örnekte, numaralandırma türünü özel bir sabit değerle nasıl tanımlayacağınızı öğreneceksiniz. Ayrıca bu örnek, özel sabitleri başlatmanın herhangi bir rastgele sırada nasıl yapılabileceğini anlamanıza yardımcı olacaktır. Bu örnekte, 1 için sabit değeri açıkça tanımladık.NSve 3rdenum öğeleri (yani, sırasıyla IO_ERROR ve NETWORK_ERROR), ancak 2 için açık başlatmayı atladıkndve 4NSelementler. 2'ye varsayılan değerleri atamak artık derleyicinin sorumluluğundadır.ndve 4NSenum öğeleri (yani, sırasıyla DISK_ERROR ve PRINT_ERROR). DISK_ERROR 3 değerine, PRINT_ERROR ise 9 değerine atanacaktır. Aşağıda örnek programı ve çıktısını göreceksiniz.

#Dahil etmek

/* Enum türünü tanımlayın - Özel başlatma*/
SıralamaHata{
IO_ERROR= 2,
DİSK HATASI,
AĞ HATASI= 8,
PRINT_ERROR
};

intana()
{

/* enum değişkeni bildir*/
SıralamaHata Hw_Error;

baskı ('Hw_Error'ı IO_ERROR olarak ayarlama ');
Hw_Error=IO_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı DISK_ERROR olarak ayarlama ');
Hw_Error=DİSK HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı NETWORK_ERROR olarak ayarlama ');
Hw_Error=AĞ HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı PRINT_ERROR olarak ayarlama ');
Hw_Error=PRINT_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

dönüş 0;
}

https://lh6.googleusercontent.com/hKtv00Hj7iPnnlNhC7mu1v7hzPhB64C9nyHwjB6oQgyCyEwOgiLSYWDOxvQCDrhumn4IzqhkN4qF9HcuGZ9thqlBLy6wzxvl2F-FUwxl

Örnek 3: Sabit İfade Kullanarak Enum Tanımı

Bu örnekte, enum öğelerinin sabit değerini tanımlamak için sabit ifadesinin nasıl kullanılacağını öğreneceksiniz.

#Dahil etmek

/* Enum türünü tanımlayın - sabit ifade kullanarak özel başlatma
sabit ifade şu durumlarda kullanılır:
a. IO_ERROR ve
B. AĞ HATASI
Bu, enum öğelerini tanımlamanın alışılmadık bir yoludur; ama, bu
program, bu şekilde enum elemanlarının başlatılmasının c'de mümkün olduğunu gösterir.
* /


SıralamaHata{
IO_ERROR= 1 + 2 * 3 + 4,
DİSK HATASI,
AĞ HATASI= 2 == 2,
PRINT_ERROR
};

intana()
{

/* enum değişkeni bildir*/
SıralamaHata Hw_Error;

baskı ('Hw_Error'ı IO_ERROR olarak ayarlama ');
Hw_Error=IO_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı DISK_ERROR olarak ayarlama ');
Hw_Error=DİSK HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı NETWORK_ERROR olarak ayarlama ');
Hw_Error=AĞ HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı PRINT_ERROR olarak ayarlama ');
Hw_Error=PRINT_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

dönüş 0;
}

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

Örnek 4: enum Kapsamı

Bu örnekte, kapsam belirleme kuralının numaralandırma için nasıl çalıştığını öğreneceksiniz. Bir sabit tanımlamak için numaralandırma yerine bir MAKRO (#define) kullanılabilirdi, ancak kapsam kuralı MAKRO için çalışmaz.

#Dahil etmek

intana()
{

/* Enum türünü tanımlayın */
SıralamaHata_1{
IO_ERROR= 10,
DİSK HATASI,
AĞ HATASI= 3,
PRINT_ERROR
};


{

/* Enum türünü iç kapsamda tanımlayın*/
SıralamaHata_1{
IO_ERROR= yirmi,
DİSK HATASI,
AĞ HATASI= 35,
PRINT_ERROR
};

/* enum değişkeni bildir*/
SıralamaError_1 Hw_Error;
baskı ('Hw_Error'ı IO_ERROR olarak ayarlama ');
Hw_Error=IO_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı DISK_ERROR olarak ayarlama ');
Hw_Error=DİSK HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı NETWORK_ERROR olarak ayarlama ');
Hw_Error=AĞ HATASI;
baskı ('Hw_Error değeri = %d ',Hw_Error);

baskı (' Hw_Error'ı PRINT_ERROR olarak ayarlama ');
Hw_Error=PRINT_ERROR;
baskı ('Hw_Error değeri = %d ',Hw_Error);
}
dönüş 0;
}

enum ve makro arasındaki karşılaştırma

Sıralama Makro
Kapsam belirleme kuralı enum için geçerlidir. Kapsam belirleme kuralı Makro için geçerli değildir.
Varsayılan Numaralandırma değeri ataması otomatik olarak gerçekleşir.

Enum, çok sayıda sabitin tanımlanmasında çok yararlıdır. Derleyici, varsayılan sabit değer başlatmasını alır.

Makro sabit değerleri her zaman programcı tarafından açıkça belirtilmelidir.

Bu, çok sayıda sabit için sıkıcı bir süreç olabilir, çünkü programcı Makro'yu tanımlarken her bir sabit değeri her zaman manuel olarak tanımlamalıdır.

Çözüm

C'deki enum programı, programcılar her zaman bir numaralandırma yerine makro kullanabildikleri için bağımsız programlar veya küçük boyutlu projeler için isteğe bağlı bir yöntem olarak düşünülebilir. Bununla birlikte, deneyimli programcılar, büyük ölçekli yazılım geliştirme projeleri için enum over macro kullanma eğilimindedir. Bu, temiz ve okunabilir programlar yazmaya yardımcı olur.