typedef struct foo_s {
int a;
} foo;
typedef struct bar_s {
foo;
int b;
} bar;
In sostanza voglio fare:Posso "estendere" una struct in C?
bar b;
b.a;
So che avrei potuto fare b.foo_name.a se avessi chiamato lo struct foo in bar, ma Id preferisco non farlo.
Un modo per farlo?
Questa domanda ha ottenuto una varietà di risposte diverse, quindi lasciatemi spiegare la necessità. La ragione per cui voglio farlo è perché ho una libreria che devo adattare alla mia situazione, il che significa che non posso modificare la decodifica della struct originale. Inoltre, tutto ciò che devo fare è aggiungere 1 elemento all'inizio della struct (perché all'inizio? Perché ho una struttura 'object' che dirige tutte le strutture nel progetto). Potrei semplicemente incorporare la struttura come dici tu, ma è DAVVERO fastidiosa dato che tutti i riferimenti dovranno essere digitati 'variable-> image.location' che 'immagine'. digitato un miliardo di tipi è davvero fastidioso.
Alcuni compilatori offrono esattamente questo comportamento come un'estensione Personalmente ritengo che offra troppi rischi (annidando la struttura di sei strati in profondità e dimenticando i nomi che hai usato), quindi mi limito a nominare il primo membro '_' - corto, coerente, fuori mano e non terribilmente inopportuno . (Il nome potrebbe essere effettivamente riservato dallo standard e/o dal compilatore ma dubito che qualcuno lo userebbe se lo fosse.) –
Se 'image' è noioso da digitare molto, usa' img'. Usa find-and-replace per farlo per te. Non preoccuparti: qualunque cosa tu debba fare, sopravvivrai. –
@ chacham15 Amico, evita di codificare una domanda in C come C++. Questi due sono lingue completamente diverse. –