C ++中的空结构没有零大小

时间:2018-03-27 10:25:38

标签: c++ c gcc g++

请考虑以下代码:

#include <stdio.h>

struct Empty1 {
} __attribute__((packed));

struct Empty2 {
        size_t data[0];
} __attribute__((packed));

int main(int argc, char *argv[])
{
        printf("sizeof(Empty1)=%zd\n", sizeof(struct Empty1));
        printf("sizeof(Empty2)=%zd\n", sizeof(struct Empty2));
        return 0;
}

编译并使用g ++(7.3)打印它:

sizeof(Empty1)=1
sizeof(Empty2)=0

这对我来说很奇怪,因为我希望sizeof(Empty1)也是0。

然而,对我来说更奇怪的是用gcc(7.3)打印编译和运行相同的代码:

sizeof(Empty1)=0
sizeof(Empty2)=0

这两个结构根据它们的编译方式有不同的大小这一事实对我来说似乎是个错误,因为它打破了用C或C ++编写的共享头文件的程序之间的ABI。在这种情况下,不确定规范指定了什么,但即使作为实现,这对我来说也很奇怪。

0 个答案:

没有答案