2010-10-03 90 views
26

可能重复:
Empty class in C++
What is the size of an empty struct in C?sizeof空结构在C中为0,在C++中为1为什么?

我读的地方在C++中的空结构的该尺寸为1因此,我认为它检验的。 不幸的是我把它保存为一个C文件并且使用了<stdio.h>头文件,我很惊讶地看到输出。这是0

这意味着,当在作为C++文件编译为C文件和1个编译

struct Empty { 

}; 

int main(void) 
{ 
    printf("%d",(int)sizeof(Empty)); 
} 

被打印0。我想知道原因。我读过C++中的sizeof空结构不是零,因为如果大小为0,则该类的两个对象将具有相同的地址,这是不可能的。我错在哪里?

+4

-1不,你没”把它编译成'C'。 – pmg 2010-10-03 10:13:34

+3

@Ninad:你试过[这个](http://ideone.com/WAxMI)吗? – 2010-10-03 10:17:12

+2

当您在这个级别的语言中提出问题时,请包含编译器名称和版本。 – 2010-10-03 10:18:24

回答

13

你不能在C中有一个空的结构。这是违反语法约束的。 但是gcc允许在C as an extension中有一个空的结构。 此外,该行为是未定义如果结构没有任何命名成员,因为

C99说:

如果结构声明列表中没有名称的成员,该行为是不确定的。

所以

struct Empty {}; //constraint violation 

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

而且是一个空结构的尺寸是C++ cannot be zero :)

相关问题