Rumah >pembangunan bahagian belakang >C++ >Adakah Struktur Tanpa Nama dalam C Mematuhi Piawaian?

Adakah Struktur Tanpa Nama dalam C Mematuhi Piawaian?

DDD
DDDasal
2024-12-07 07:30:12442semak imbas

Are Anonymous Structs in C   Standard Compliant?

Struktur Tanpa Nama: Standard atau Tidak?

Menurut MSDN, struct tanpa nama adalah bukan standard dalam C . Walau bagaimanapun, kenyataan ini menimbulkan persoalan sama ada perbezaan ini adalah tepat.

Struktur Tanpa Nama Piawai

Piawaian C (kedua-dua C 03 dan C 11) membenarkan penciptaan struct tanpa nama seperti berikut:

struct {
   int hi;
   int bye;
};

Streng tanpa nama ini boleh dijadikan sebagai ahli struct lain:

struct Foo {
   struct {
      int hi;
      int bye;
   } bar;
};

Struktur Tanpa Nama dalam Visual C dan GCC

Apa yang sering dirujuk sebagai "struktur tanpa nama" dalam Visual C dan GCC adalah sedikit berbeza. Arahan ini juga membenarkan mengakses ahli secara terus melalui objek induk:

struct Foo {
   struct { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested struct
}

Struktur Tanpa Nama Bukan Standard

Fungsi mengakses ahli secara terus melalui objek induk ini bukan standard. Ia adalah sambungan Microsoft yang disokong dalam Visual C dan juga oleh GCC. Pengepala API Windows menggunakan ciri "struktur tanpa nama" ini. Walau bagaimanapun, ia boleh dilumpuhkan dengan mentakrifkan NONAMELESSUNION sebelum memasukkan fail pengepala Windows.

Perbezaan daripada Kesatuan Tanpa Nama

Kesatuan tanpa nama standard juga menyediakan akses kepada ahli secara terus melalui objek induk . Contohnya:

struct Foo {
   union { // No member name
      int hi;
      int bye;
   };
};

int main() {
   Foo f;
   f.hi = 3; // Access member without using nested union
}

Kesimpulan

Istilah "struktur tanpa nama" dalam standard merujuk kepada jenis keseluruhan, manakala istilah "struktur tanpa nama" digunakan dalam Visual C dan GCC merujuk kepada keupayaan untuk mengakses ahli secara langsung melalui objek induk. Fungsi terakhir ini bukan standard, walaupun ia kekal disokong secara meluas oleh penyusun popular.

Atas ialah kandungan terperinci Adakah Struktur Tanpa Nama dalam C Mematuhi Piawaian?. 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