Rumah > pembangunan bahagian belakang > C++ > Bolehkah saya Majukan Mengisytiharkan Enum dalam C dan Bagaimana?

Bolehkah saya Majukan Mengisytiharkan Enum dalam C dan Bagaimana?

Patricia Arquette
Lepaskan: 2024-12-11 00:27:14
asal
865 orang telah melayarinya

Can I Forward Declare Enums in C   and How?

Maju Mengisytiharkan Enum dalam C : Had dan Penyelesaian

Dalam C , pengisytiharan hadapan enum sebelum ini adalah mustahil kerana saiz penghitungan bergantung pada kandungannya. Walau bagaimanapun, dengan pengenalan C 11, pengisytiharan hadapan menjadi mungkin selagi saiz penghitungan dinyatakan dengan jelas.

Pernyataan Masalah:

Isu asal timbul apabila cuba memajukan mengisytiharkan enum dengan cara berikut:

enum E;

void Foo(E e);

enum E {A, B, C};
Salin selepas log masuk

Kod ini telah ditolak oleh pengkompil.

Penjelasan:

Dalam C 03 dan versi terdahulu, pengisytiharan hadapan enum tidak dibenarkan kerana pengkompil perlu mengetahui saiz enum dalam untuk menyimpan nilainya. Saiz enum bergantung pada bilangan dan jenis nilai terhitungnya. Tanpa maklumat ini, pengkompil tidak dapat memperuntukkan memori untuk enum.

Penyelesaian dalam C 11 dan Di Atas:

Dalam versi C 11 dan yang lebih baru, pengisytiharan hadapan enum adalah mungkin dengan menyatakan secara eksplisit saiz penghitungan. Ini boleh dilakukan menggunakan enum : sintaks, di mana ialah jenis asas enum, seperti unsigned int atau unsigned short.

Contohnya:

enum Enum : unsigned int; // Forward declaration with an underlying type
void Foo(Enum e);

// Definition of the enum in a separate source file
enum Enum {
    VALUE1, VALUE2, VALUE3
};
Salin selepas log masuk

Kod ini kini akan berjaya disusun.

Pertimbangan untuk Nilai Enum Persendirian:

Dalam senario khusus yang dinyatakan, di mana nilai enum harus dirahsiakan, pendekatan pengisytiharan hadapan masih berdaya maju. Enum boleh diisytiharkan secara peribadi dalam fail pengepala dan ditakrifkan secara dalaman dalam fail pelaksanaan, tanpa mendedahkan nilai enum kepada pelanggan.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengisytiharan ke hadapan tidak menghalang akses kepada nilai enum dalam unit terjemahan yang sama (iaitu, fail sumber atau set fail yang sama yang disusun bersama). Oleh itu, anda masih boleh mengakses nilai enum daripada bahagian lain program yang mempunyai akses kepada fail pengepala.

Atas ialah kandungan terperinci Bolehkah saya Majukan Mengisytiharkan Enum dalam C dan Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan