Leggendo The Development of the C Language, quando Dennis Ritchie discute embrionali C descrive la sua intenzione di struct
:
ho voluto la struttura non solo per caratterizzare un oggetto astratto, ma anche per descrivere un insieme di bit che potrebbe essere letto da una directory.
La sezione sta ampiamente discutendo di come questa idea abbia portato all'introduzione della "matrice < -> equivalenza del puntatore". Tuttavia, parla alla natura di basso livello di C (a struct
rappresenta una "raccolta di bit").
Al contrario, C++ utilizza un struct
come un tipo di sinonimo per class
, ma dove tutto è pubblico. Un class
è davvero un concetto di programmazione orientata agli oggetti in cui è più naturale che il suo tag sia trattato come un tipo.
È improbabile che Dennis Ritchie sia in grado di rispondere alla tua domanda ... Se la risposta non è presente nel documento Rationale (http://www.open-std.org/jtc1/sc22/wg14/ www/C99RationaleV5.10.pdf), quindi questa domanda probabilmente non è risolvibile ... –
Penso che troverete che 'struct tag' ha preceduto' typedef' di alcuni anni, e quindi era tutto giù alla compatibilità all'indietro . C++ ha fatto come vuoi Prova a cercare "Primeval C". Ho un file tar 'v6root.tar' che contiene sorgenti con molti 'struct' ma nary a' typedef' in esso. Questo dovrebbe essere il codice sorgente di Unix V6. Unix V7 aveva 'typedef'. –
La ragione più ovvia è che con solo 'struct' e' union', il linguaggio era ancora context-free - non è stato fino alla successiva aggiunta di 'typedef' che il linguaggio C richiedeva un parser sensibile al contesto. – caf