Query for Empty Structure Extension.

NAVEEN CHANDRAKAR naveen.c@samsung.com
Thu Jan 3 19:35:00 GMT 2013


Thanks for the quick reply.

As per the C++ standard (ISO/IEC 14882, 1998 first edition)

Section 9: Classes definition says.
Complete objects and member subobjects of class type shall have nonzero size.

Corrent me if i'm wrong here, but from this i had concluded empty object and structures are not part of C++ standard (or maybe my copy of standard is old).
And they're implemented as part of GCC/G++ extension.

If so, then my question stands that how do we decide that a structure is empty ?

As per the definition of empty structures extension, should have size 1 byte in g++.
So what do we call structures which return size 0 in g++ ?

Eg: 
struct T4
{long int:0;}t4;
//has size 1 in g++

whereas

struct T1
{struct{}a[0]; }t1;
//has size 0 in g++

As based on the size of object, optimization can take place at the caller and callee side (eg: ignoring of records with 0 size in the argument list of variable arguments to reduce stack operation).
And since G++/GCC has ABI compatibility with several other compilers, i was hoping if there would be some rule to distinguish as to when to assign 1 byte and when 0 for empty structures.

Warm Regards,
Naveen

------- Original Message -------
Sender : Jonathan Wakely<jwakely.gcc@gmail.com>
Date : Jan 03, 2013 00:17 (GMT+09:00)
Title : Re: Query for Empty Structure Extension.

On 2 January 2013 14:32, NAVEEN CHANDRAKAR wrote:
>
> My question is what is the definition/grammer of empty structure. As i couldn't find it covered in C/Cxx standard document.

The page you linked to defines a GCC extension to the C language, so
if course it's not in the C standard. As the page says, ISO C++ allows
empty structures, it's just a class with no members, which is valid in
ISO C++ anyway.


More information about the Gcc mailing list