Πώς να χρησιμοποιήσετε το enum στη γλώσσα C

How Use Enum C Language



Το πρόγραμμα enum στη γλώσσα προγραμματισμού C χρησιμοποιείται για τον καθορισμό ολοκληρωμένων σταθερών τιμών, κάτι που βοηθά πολύ στη σύνταξη καθαρών και ευανάγνωστων προγραμμάτων. Οι προγραμματιστές συνήθως χρησιμοποιούν την απαρίθμηση για να ορίσουν ονομαζόμενες ολοκληρωμένες σταθερές στα προγράμματά τους για να παρέχουν καλύτερη αναγνωσιμότητα και διατηρησιμότητα του λογισμικού. Αυτό το άρθρο θα συζητήσει λεπτομερώς το enum.

Σύνταξη

enum <Όνομα τύπου Enum>> {
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).







Deep Dive into Enum

Τώρα, δεδομένου ότι γνωρίζουμε τη σύνταξη για τον ορισμό του τύπου απαρίθμησης, ας δούμε ένα παράδειγμα:



enumΛάθος{
IO_ERROR,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ
}?

Η λέξη -κλειδί enum πρέπει πάντα να χρησιμοποιείται για τον καθορισμό του τύπου απαρίθμησης. Έτσι, όποτε θέλετε να ορίσετε έναν τύπο απαρίθμησης, πρέπει να χρησιμοποιήσετε τη λέξη -κλειδί enum πριν. Μετά τη λέξη -κλειδί enum, πρέπει να χρησιμοποιήσετε ένα έγκυρο αναγνωριστικό για να ορίσετε το.



Στο παραπάνω παράδειγμα, ο μεταγλωττιστής θα εκχωρήσει IO_ERROR στην ολοκληρωμένη τιμή: 0, DISK_ERROR στην ολοκληρωμένη τιμή: 1 και NETWORK_ERROR στην ολοκληρωμένη τιμή: 2. Από προεπιλογή, στο πρώτο στοιχείο enum αποδίδεται πάντα η τιμή 0, στο επόμενο στο στοιχείο enum εκχωρείται η τιμή 1 και ούτω καθεξής.





Αυτή η προεπιλεγμένη συμπεριφορά μπορεί να αλλάξει εάν είναι απαραίτητο εκχωρώντας τη σταθερή ολοκληρωμένη τιμή ρητά, ως εξής:

enumΛάθος{
IO_ERROR= 2,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ= 8 ,
PRINT_ERROR
}?

Σε αυτήν την περίπτωση, το IO_ERROR εκχωρείται ρητά σε μια τιμή 2 από τον προγραμματιστή, το DISK_ERROR εκχωρείται σε μια τιμή 3 από τον μεταγλωττιστή, το NETWORK_ERROR εκχωρείται ρητά στην τιμή 8 από τον προγραμματιστή και το PRINT_ERROR εκχωρείται στον επόμενο ολοκληρωμένη τιμή του προηγούμενου στοιχείου enum NETWORK_ERROR (δηλαδή, 9) από τον μεταγλωττιστή.



Έτσι, τώρα καταλαβαίνετε πώς να ορίσετε έναν τύπο απαρίθμησης που ορίζεται από το χρήστη στο C. Είναι δυνατόν να δηλωθεί μια μεταβλητή τύπου enum (όπως μπορούμε να δηλώσουμε μια μεταβλητή ακεραίου τύπου); Ναι είναι! Μπορείτε να δηλώσετε τη μεταβλητή enum ως εξής:

enumΣφάλμα Hw_Error?

Και πάλι, το enum είναι η λέξη -κλειδί εδώ, το Error είναι ο τύπος enum και το Hw_Error είναι μια μεταβλητή enum.

Θα δούμε τώρα τα ακόλουθα παραδείγματα για να κατανοήσουμε τις διάφορες χρήσεις του enum:

  • Παράδειγμα 1: Προεπιλεγμένη χρήση ορισμού αρίθμησης
  • Παράδειγμα 2: Προσαρμοσμένη χρήση ορισμού enum
  • Παράδειγμα 3: ορισμός enum χρησιμοποιώντας σταθερή έκφραση
  • Παράδειγμα 4: πεδίο enum

Παράδειγμα 1: Προεπιλεγμένη χρήση ορισμού

Σε αυτό το παράδειγμα, θα μάθετε πώς να ορίσετε τον τύπο απαρίθμησης με προεπιλεγμένες σταθερές τιμές. Ο μεταγλωττιστής θα φροντίσει για την εκχώρηση των προεπιλεγμένων τιμών στα στοιχεία enum. Παρακάτω, θα δείτε το παράδειγμα προγράμματος και την αντίστοιχη έξοδο.

#περιλαμβάνω

/ * Ορίστε τον τύπο enum */
enumΛάθος{
IO_ERROR,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ
}?

intκύριος()
{
enumΣφάλμα Hw_Error? /* Δημιουργία μεταβλητής enum*/

printf («Ρύθμιση σφάλματος Hw_Error σε IO_ERROR n')?
Hw_Error=IO_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε DISK_ERROR n')?
Hw_Error=DISK_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε NETWORK_ERROR n')?
Hw_Error=ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

ΕΠΙΣΤΡΟΦΗ 0?
}

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

Παράδειγμα 2: Χρήση προσαρμοσμένου ορισμού

Σε αυτό το παράδειγμα, θα μάθετε πώς να ορίσετε τον τύπο απαρίθμησης με μια προσαρμοσμένη σταθερή τιμή. Επίσης, αυτό το παράδειγμα θα σας βοηθήσει να καταλάβετε πώς μπορεί να γίνει η προετοιμασία των προσαρμοσμένων σταθερών με οποιαδήποτε τυχαία σειρά. Σε αυτό το παράδειγμα, ορίσαμε ρητά τη σταθερή τιμή για το 1stκαι 3rdenum στοιχεία (δηλαδή, IO_ERROR και NETWORK_ERROR, αντίστοιχα), αλλά έχουμε παραλείψει τη ρητή αρχικοποίηση για το 2ndκαι 4ουστοιχεία. Είναι πλέον ευθύνη του μεταγλωττιστή να εκχωρήσει τις προεπιλεγμένες τιμές στο 2ndκαι 4ουenum στοιχεία (δηλαδή, DISK_ERROR και PRINT_ERROR, αντίστοιχα). Το DISK_ERROR θα αντιστοιχιστεί σε μια τιμή 3 και το PRINT_ERROR θα αποδοθεί σε μια τιμή 9. Παρακάτω, θα δείτε το παράδειγμα προγράμματος και την έξοδο.

#περιλαμβάνω

/* Ορισμός του τύπου enum - Προσαρμοσμένη αρχικοποίηση*/
enumΛάθος{
IO_ERROR= 2,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ= 8,
PRINT_ERROR
}?

intκύριος()
{

/* Δήλωση μεταβλητής αρίθμησης*/
enumΣφάλμα Hw_Error?

printf («Ρύθμιση σφάλματος Hw_Error σε IO_ERROR n')?
Hw_Error=IO_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε DISK_ERROR n')?
Hw_Error=DISK_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε NETWORK_ERROR n')?
Hw_Error=ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΟρισμός σφάλματος Hw_Error σε PRINT_ERROR n')?
Hw_Error=PRINT_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

ΕΠΙΣΤΡΟΦΗ 0?
}

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

Παράδειγμα 3: Ορισμός αριθμού χρησιμοποιώντας σταθερή έκφραση

Σε αυτό το παράδειγμα, θα μάθετε πώς να χρησιμοποιείτε τη σταθερή έκφραση για να καθορίσετε τη σταθερή τιμή για στοιχεία enum.

#περιλαμβάνω

/* Ορίστε τον τύπο enum - προσαρμοσμένη αρχικοποίηση χρησιμοποιώντας σταθερή έκφραση
η σταθερή έκφραση χρησιμοποιείται εδώ σε περίπτωση:
ένα. IO_ERROR και
σι. ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ
Αυτός είναι ένας ασυνήθιστος τρόπος καθορισμού των στοιχείων enum. ωστόσο, αυτό
πρόγραμμα αποδεικνύει ότι αυτός ο τρόπος αρχικοποίησης στοιχείων enum είναι δυνατός στο γ.
* /


enumΛάθος{
IO_ERROR= 1 + 2 * 3 + 4,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ= 2 == 2,
PRINT_ERROR
}?

intκύριος()
{

/* Δήλωση μεταβλητής αρίθμησης*/
enumΣφάλμα Hw_Error?

printf («Ρύθμιση σφάλματος Hw_Error σε IO_ERROR n')?
Hw_Error=IO_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε DISK_ERROR n')?
Hw_Error=DISK_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε NETWORK_ERROR n')?
Hw_Error=ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΟρισμός σφάλματος Hw_Error σε PRINT_ERROR n')?
Hw_Error=PRINT_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

ΕΠΙΣΤΡΟΦΗ 0?
}

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

Παράδειγμα 4: enum Πεδίο εφαρμογής

Σε αυτό το παράδειγμα, θα μάθετε πώς λειτουργεί ο κανόνας πεδίου εφαρμογής για το enum. Ένα MACRO (#define) θα μπορούσε να χρησιμοποιηθεί για να ορίσει μια σταθερά αντί για το enum, αλλά ο κανόνας του πεδίου εφαρμογής δεν λειτουργεί για το MACRO.

#περιλαμβάνω

intκύριος()
{

/ * Ορίστε τον τύπο enum */
enumΣφάλμα_1{
IO_ERROR= 10,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ= 3,
PRINT_ERROR
}?


{

/* Ορίστε τον τύπο enum στο εσωτερικό πεδίο*/
enumΣφάλμα_1{
IO_ERROR= είκοσι,
DISK_ERROR,
ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ= 35,
PRINT_ERROR
}?

/* Δήλωση μεταβλητής αρίθμησης*/
enumΣφάλμα_1 Hw_Error?
printf («Ρύθμιση σφάλματος Hw_Error σε IO_ERROR n')?
Hw_Error=IO_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε DISK_ERROR n')?
Hw_Error=DISK_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΡύθμιση Hw_Error σε NETWORK_ERROR n')?
Hw_Error=ΣΦΑΛΜΑ ΔΙΚΤΥΟΥ?
printf ('Αξία Hw_Error = %d n',Hw_Error)?

printf (' nΟρισμός σφάλματος Hw_Error σε PRINT_ERROR n')?
Hw_Error=PRINT_ERROR?
printf ('Αξία Hw_Error = %d n',Hw_Error)?
}
ΕΠΙΣΤΡΟΦΗ 0?
}

Σύγκριση μεταξύ enum και macro

Enum Μακροεντολή
Ο κανόνας του πεδίου εφαρμογής ισχύει για το enum. Ο κανόνας περιορισμού δεν ισχύει για τη μακροεντολή.
Προεπιλεγμένη αντιστοίχιση τιμής πραγματοποιείται αυτόματα.

Το Enum είναι πολύ χρήσιμο για τον καθορισμό ενός μεγάλου αριθμού σταθερών. Ο μεταγλωττιστής λαμβάνει την προεπιλεγμένη αρχική σταθεροποίηση τιμής.

Οι σταθερές τιμές μακροεντολής πρέπει πάντα να αναφέρονται ρητά από τον προγραμματιστή.

Αυτό θα μπορούσε να είναι μια κουραστική διαδικασία για μεγάλο αριθμό σταθερών αφού ο προγραμματιστής πρέπει πάντα να ορίζει χειροκίνητα κάθε σταθερή τιμή ενώ ορίζει τη μακροεντολή.

συμπέρασμα

Το πρόγραμμα enum σε C θα μπορούσε να θεωρηθεί προαιρετική μέθοδος για μεμονωμένα προγράμματα ή έργα μικρού μεγέθους, καθώς οι προγραμματιστές μπορούν πάντα να χρησιμοποιούν μακροεντολή αντί για enum. Ωστόσο, έμπειροι προγραμματιστές τείνουν να χρησιμοποιούν το enum over macro για έργα ανάπτυξης λογισμικού μεγάλης κλίμακας. Αυτό βοηθά στη σύνταξη καθαρών και ευανάγνωστων προγραμμάτων.