sizeof empty structure is 0 in C and 1 in C++ why? [duplicate]

我的梦境 提交于 2019-11-28 17:13:52
Prasoon Saurav

You cannot have an empty structure in C. It is a syntactic constraint violation. However gcc permits an empty structure in C as an extension. Furthermore the behaviour is undefined if the structure does not have any named member because

C99 says :

If the struct-declaration-list contains no named members, the behavior is undefined.

So

struct Empty {}; //constraint violation

struct Empty {int :0 ;}; //no named member, the behaviour is undefined.

And yes size of an empty struct is C++ cannot be zero :)

There are several good reasons. Among others, this is to ensure that pointer arithmetics over pointers to that structure don't lead to an infinite loop. More information:

http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a

Here is a wonderful article describing why this occurs, and more pertinently, a (safe) way around it :)

http://www.cantrip.org/emptyopt.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!