Unix up until at least System III used the structure thing to do the equivalent to unions, before unions were a thing - for example each disk driver had a data structure that began with a common part and then had a per-device part, generic parts of the kernel used a generic structure that only represented the generic data structure, drivers used their own version.
I think part of this is that early Cs didn't have a full type system, there were limits to the types you could describe (the ones you couldn't were mostly a bit esoteric and not very useful) - from memory in the original PCC types were encoded in the compiler as words rather than trees (pdp11 memory was scarce)
I think part of this is that early Cs didn't have a full type system, there were limits to the types you could describe (the ones you couldn't were mostly a bit esoteric and not very useful) - from memory in the original PCC types were encoded in the compiler as words rather than trees (pdp11 memory was scarce)