Po przeczytaniu The Development of the C Language, kiedy Dennis Ritchie omawia embrionalnych C opisuje swoją intencję na struct
:
Chciałem strukturę nie tylko do scharakteryzowania abstrakcyjny obiekt, ale także opisać zbiór bitów można odczytać z katalogu.
Sekcja w dużej mierze omawia, w jaki sposób pomysł ten doprowadził do wprowadzenia "tablicy < -> równoważności wskaźnika". Mówi jednak do niskiego poziomu C (struct
reprezentuje "zbiór bitów").
W przeciwieństwie do C++ używa struct
jako swego rodzaju synonimu dla class
, ale gdzie wszystko jest publiczne. A class
jest tak naprawdę pojęciem programowania obiektowego, w którym bardziej naturalne jest traktowanie jego znacznika jako typu.
Jest mało prawdopodobne, aby Dennis Ritchie mógł odpowiedzieć na twoje pytanie ... Jeśli odpowiedzi nie ma w dokumencie "Uzasadnienie" (http://www.open-std.org/jtc1/sc22/wg14/ www/C99RationaleV5.10.pdf), wtedy to pytanie prawdopodobnie nie jest odpowiedzialne ... –
Myślę, że przekonasz się, że 'struct tag' poprzedza' typedef' przez kilka lat, a potem wszystko zależy od zgodności wstecznej . C++ zrobił to, co chcesz. Spróbuj polować na "Primeval C". Mam plik tar "v6root.tar", który zawiera źródło z mnóstwem 'struct', ale nie zawiera w sobie' typedef'. To powinien być kod źródłowy Unix V6. Unix V7 miał 'typedef'. –
Najbardziej oczywistym powodem jest to, że po prostu 'struct' i' union', język był wciąż wolny od kontekstu - dopiero w późniejszym dodaniu 'typedef' język C wymagał parser kontekstowego. – caf