Rumah >pembangunan bahagian belakang >C++ >Mengapa C Tidak Membenarkan Struktur Tanpa Nama Semasa Membenarkan Kesatuan Tanpa Nama?

Mengapa C Tidak Membenarkan Struktur Tanpa Nama Semasa Membenarkan Kesatuan Tanpa Nama?

Susan Sarandon
Susan Sarandonasal
2024-12-11 15:25:12620semak imbas

Why Doesn't C   Allow Anonymous Structs While Permitting Anonymous Unions?

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!

Kenyataan:
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