On Thu, 11 May 2023, 23:17 Kees Cook via Gcc, wrote: > On Thu, May 11, 2023 at 09:43:49PM +0000, Joseph Myers wrote: > > On Thu, 11 May 2023, Kees Cook via Gcc wrote: > > > > > Why are zero-sized objects missing in Standard C? Or, perhaps, the > better > > > question is: what's needed to support the idea of a zero-sized object? > > > > Zero-sized objects break the principle that different objects have > > different addresses, and the principle of being able to subtract > pointers > > to different elements of an array. There would also be serious C++ > > compatibility concerns, since C++ allows a struct with no members but it > > has nonzero size, unlike the GNU C extension where a struct with no > > members has size zero. > > Okay, understood. If this is a C-only thing, we can ignore the C++ > impact. What depends on the "different objects have different addresses" > principle? And why do unions not break this -- they could point to the > same locations within the object? You don't have two different objects with the same address in a union, because only one of them "exists" at any time. You're reusing the storage for one object at a time, not for all of the union members.