По мне, это ноль, но, похоже, здесь есть путаница
Я тестировал его с помощью gcc-компилятора, и он дает мне нулевой результат. Я знаю, что в С++ размер пустого класса равен 1. Дайте мне знать, если я здесь что-то не хватает.
По мне, это ноль, но, похоже, здесь есть путаница
Я тестировал его с помощью gcc-компилятора, и он дает мне нулевой результат. Я знаю, что в С++ размер пустого класса равен 1. Дайте мне знать, если я здесь что-то не хватает.
Строка не может быть пустой в C, потому что синтаксис запрещает ее. Кроме того, существует семантическое ограничение, которое делает поведение undefined, если структура не имеет именованного члена:
struct-or-union-specifier:
struct-or-union identifieropt { struct-declaration-list }
struct-or-union identifier
struct-or-union:
struct
union
struct-declaration-list:
struct-declaration
struct-declaration-list struct-declaration
struct-declaration:
specifier-qualifier-list struct-declarator-list ;
/* type-specifier or qualifier required here! */
specifier-qualifier-list:
type-specifier specifier-qualifier-listopt
type-qualifier specifier-qualifier-listopt
struct-declarator-list:
struct-declarator
struct-declarator-list , struct-declarator
struct-declarator:
declarator
declaratoropt : constant-expression
Если вы пишете
struct identifier { };
Это даст вам диагностическое сообщение, потому что вы нарушаете синтаксические правила. Если вы пишете
struct identifier { int : 0; };
Затем у вас есть непустая структура без именных элементов, что приводит к поведению undefined и не требует диагностики:
Если в списке struct-declaration-list нет именованных членов, поведение не определено.
Обратите внимание, что следующее запрещено, поскольку элемент гибкого массива не может быть первым членом:
struct identifier { type ident[]; };
В грамматике C не допускается, чтобы содержимое struct
было пустым - должно быть хотя бы неназванное битовое поле или именованный член (насколько это касается грамматики), я не уверен, struct, которая содержит только неназванное битовое поле, в остальном действительна).
Поддержка пустых структур на C - это расширение в GCC.
В С++ и пустой спецификации элемента struct/class явно разрешено, но размер определяется как 1 - если только в рамках пустой оптимизации базы данных компилятору не разрешено делать пустой базовый класс, не занимать места в производном класс.
В C99: "Если в списке struct-declaration-list нет именованных членов, поведение undefined."
Синтаксис на самом деле не позволяет это сделать, хотя я не вижу ничего, что говорит о необходимости диагностики, что довольно сильно помещается в лагерь поведения undefined.
на VC 8 Он дает ошибку, если мы попытаемся получить sizeof пустой struct, наоборот, на linux с gcc он дает размер 1, потому что он использует gcc extention вместо спецификации языка c, которая говорит, что это поведение undefined.
struct node
{
// empty struct.
};
int main()
{
printf("%d", sizeof(struct node));
return 0;
}
на windows vc 2005 Он дает ошибку компиляции на linux с gcc он дает размер 1, потому что расширение gcc http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Empty-Structures.html#Empty-Structures (Как указано Майклом Берром)