Ben aşağıdaki örnekte olduğu gibi bir birlik initialize global olarak çalışılıyor: kodu çalıştırırsanız, temp.i veya temp.t [o ne dikkat edeceğiz, ancakSendika başlatma
#include <cstdio>
typedef union {
char t[4];
int i;
} a;
enum {
w = 5000,
x,
y,
z
};
a temp = {w};
int main() {
printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
return 0;
}
...] aslında sendika ile başlatılan doğru öğeyi verir. Tamsayı üyeyi el ile başlatabilirsem, bunun önüne geçileceğini düşünürdüm ama ne yazık ki yapamam. Yapıdaki elemanların sırasını değiştiremiyorum (int ve char sırasını değiştirerek her şeyi düzgün bir şekilde başlatıyor) - aslında bir dış kütüphane tarafından sağlanıyorlar. Soruma şudur: char [4] üyesinden ziyade global yapısının tamsayı üyesini nasıl ayarlayabilirim (veya bu durumda, yalnızca char [] öğesinin ilk öğesi)?
DÜZENLEME: Ayrıca, bu soruna kesinlikle C++ çözüm var mı? yani, adlandırılmış struct initialisation'ın çalışmadığı bir yer (dilde mevcut olmadığı için)?
Ah güzellik; aradığım şey buydu. Alkışlar –
Bunun standart olmayan bir dil uzantısı olduğunu ve diğer derleyicilere geçtiğinizde bunun başarısız olacağını unutmayın. –
Evet, bu yüzden gcc/g ++ 'dan bahsetmiştim. Sendika üyelerini başlatmak için geçerli bir C++ yöntemi görünmemektedir. – evgeny