SORU
12 ŞUBAT 2010, Cuma


Neden C anonim yapılar ve sendikalara izin yok?

Bazı C derleyicileri standart C için bir uzantısı olarak anonim sendikalar ve yapı izin verir . Bazen çok yararlı olduğunu sözdizimsel şeker bir şey.

Standart bir parçası olmasını da engeller bunun mantığı ne? Teknik bir engel var mı? Bir felsefe mi? Ya da sadece bunu haklı göstermek için bir ihtiyaç yeterli değil mi?

İşte ben neden bahsettiğimi bir örnek:

struct vector3 {
  union {
    struct {
      float x;
      float y;
      float z;
    };
    float v[3];
  };
};

Benim derleyici bunu kabul eder, ama "nameless struct/union" is a non-standard extension to C konusunda uyarıyor.

CEVAP
8 EKİM 2012, PAZARTESİ


Diğerleri anonim sendikaların belirttiği gibi standart C izin verilir , ama anonim bir yapı değildir.

Bunun nedeni C anonim sendikalar ancak anonim yapılar destekler, bu yüzden C uyumluluk için eski ama uyumluluk için gerekli değil, çünkü ikincisi değil destekler.

Ayrıca, C anonim yapılar bir faydası yok . Kullanımını göstermek için bir yapı içeren üç yüzer olabilir hangi sözü edilen her iki tarafından .v[i] .x, .y .z sanırım sonuç tanımsız davranış C . C, bir birliğin bir üyesi yazmak için izin vermez, ki .v[1], ve sonra başka bir üye okuma .y söylüyorlar. Ancak kod bu aslında iyi tanımlanmış değil nadir değildir.

C 'ler için imkanlar kullanıcı tanımlı türler alternatif çözümler sunar. Örneğin:

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]; }
};

* C11 görünüşe göre anonim yapılar ekler, C, ileride bir revizyon onları ekleyebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • glowpinkstah

    glowpinkstah

    16 Mayıs 2006
  • TechBalance

    TechBalance

    12 HAZİRAN 2011
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÜL 2013