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};
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 :
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 };
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!