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

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007