2011-01-25 9 views
5

Ho appena imbattuto in un frammento di codice dice: -Qual è il significato di una struttura all'interno di un'altra senza il nome di un tag?

struct a { 
    int mem1; 
    char mem2; 

    struct { 
     int inner_mem1; 
     int inner_mem2; 
    }; 
}; 

e ho scoperto che il frammento di codice utilizzando i membri della struct interno direttamente utilizzando il nome della variabile del struct esterno !!! es:

struct a *avar; 
.... 
avar->inner_mem1 

E 'legale, il codice è la compilazione e comunque lavorando bene !. Qual è lo scopo di usarlo in questo modo? Eventuali scenari specifici?

Per favore fatemi sapere i vostri pensieri.

+0

Perché sono utili: http://stackoverflow.com/questions/8932707/what-are-anonymous-struct-and-unions-useful-for-in-c11 –

risposta

7

questo è chiamato una "struttura anonimo":

Un membro anonimo del tipo struttura senza tag si chiama un anonimo struttura; un anonimo membro del sindacato di tipo senza tag viene chiamato un unione anonima . I membri di una struttura o unione anonima sono considerati membri della struttura o unione contenente . Questo si applica in modo ricorsivo se la struttura o l'unione che contiene è anonimo.

Questo non fa parte dello standard C corrente, C99, ma è previsto che faccia parte di quello imminente (citazione sopra). Inoltre, molti compilatori supportano già questa funzionalità come un'estensione.

+1

Che cosa stai citando esattamente? Non sembra essere lo standard C. – Lundin

+1

@Lundin, stavo citando dal progetto per il prossimo standard. Aggiunta una nota alla mia risposta. –

+0

Quota è in entrata dalla bozza C1X. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1516.pdf Alcuni compilatori lo supportano già. Questa funzione proviene dal compilatore Plan 9 C btw. – nos

Problemi correlati