Rasional Di Sebalik Penolakan Struktur Tanpa Nama dalam C
Penyusun C boleh membenarkan penggunaan kesatuan dan struct tanpa nama sebagai sambungan kepada standard . Walau bagaimanapun, piawaian itu sendiri hanya membenarkan kesatuan tanpa nama, bukan struct tanpa nama. Apakah yang ada di sebalik percanggahan ini?
Puncanya berpunca daripada keserasian dengan C. C menyokong kesatuan tanpa nama, tetapi bukan struktur tanpa nama. Untuk mencapai keserasian, C menggabungkan kesatuan tanpa nama ke dalam bahasanya. Walau bagaimanapun, tiada keperluan untuk keserasian dengan struct tanpa nama dalam C, jadi ia ditinggalkan daripada standard.
Selain itu, struct tanpa nama tidak mempunyai tujuan tertentu dalam C . Contoh yang diberikan, di mana struct memegang tiga apungan yang boleh diakses melalui kedua-dua .v[i] dan .x, .y, .z, dianggap kelakuan tidak ditentukan dalam C . Adalah tidak digalakkan untuk menulis kepada seorang ahli kesatuan (.v[1]) dan membaca daripada yang lain (.y).
C menawarkan penyelesaian alternatif melalui jenis yang ditentukan pengguna. Contohnya:
struct vector3 { float v[3]; float &operator[](int i) { return v[i]; } float &x() { return v[0]; } float &y() { return v[1]; } float &z() { return v[2]; } };
Kod ini menyediakan kefungsian yang diingini sambil mematuhi piawaian C. Adalah bijak untuk menggunakan struktur yang ditentukan untuk mengurus data dan bukannya struct tanpa nama, walaupun ia boleh dilakukan dalam sambungan pengkompil tertentu.
Atas ialah kandungan terperinci Mengapa C Tidak Membenarkan Struktur Tanpa Nama Semasa Membenarkan Kesatuan Tanpa Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!