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
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]; }
};
Neden belirli Unicode karakterler içer...
Neden aynı hat üzerinde anonim bir fon...
't neden C# Statik Yöntemler bir ...
Neden değişken yapılar“”? kötü...
Neden't statik Java yöntemleri ge...