Подтвердить что ты не робот

Sizeof пустой структуры 0 в C и 1 в С++ почему?

Возможные дубликаты:
Пустой класс в С++
Каков размер пустой структуры в C?

Я где-то читал, что размер пустой структуры в С++ равен 1. Поэтому я подумал о ее проверке. К сожалению, я сохранил его как файл C и использовал заголовок <stdio.h>, и я был удивлен, увидев выход. Это было 0.

Это означает

struct Empty {

};

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

печатал 0 при компиляции в виде файла C и 1 при компиляции в виде файла С++. Я хочу знать причину. Я читал, что sizeof пустой структуры в С++ не равен нулю, потому что если бы размер был равен 0, то два объекта класса имели бы тот же адрес, который невозможен. Где я ошибаюсь?

4b9b3361

Ответ 1

У вас не может быть пустой структуры в C. Это синтаксическое нарушение ограничений. Однако gcc разрешает пустую структуру в C как расширение. Кроме того, поведение undefined, если структура не имеет именованного члена, потому что

C99 говорит:

Если в списке struct-declaration-list нет именованных членов, поведение undefined.

So

struct Empty {}; //constraint violation

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

И да размер пустой структуры - это С++ не может быть нулем:)

Ответ 2

Есть несколько веских причин. В частности, это означает, что арифметика указателей над указателями на эту структуру не приводит к бесконечному циклу. Дополнительная информация:

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

Ответ 3

Вот замечательная статья, описывающая, почему это происходит, и, что более важно, (безопасный) путь вокруг него:)

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