пустые определения структуры, недопустимые в C, но не C++?

struct t_empty {
};

Это, кажется, компилирует правильно в C++, но не C. (по крайней мере, с TI 28xx компилятор дес. ложки, где это испускает ошибку, "ожидал объявление"), это упоминается где-нибудь в стандартах C, или мой компилятор повреждается?

6
задан Jason S 17 May 2010 в 14:33
поделиться

1 ответ

Пустая структура - это синтаксическая ошибка в C. Грамматика языка C написана так, что она запрещает пустые структуры. Т.е. вы не найдете его явного указания в стандарте, это просто следует из грамматики.

В C ++ действительно допустимы пустые классы.

P.S.Обратите внимание, что часто вы можете увидеть цитату из стандарта C, в которой говорится «Если список-декларации-структуры не содержит именованных членов, поведение не определено». , которая представлена ​​как часть документа это запрещает пустые структуры. На самом деле, пустые структуры снова запрещены грамматикой. Таким образом, буквально пустая структура (как в вашем вопросе) - это синтаксическая ошибка, а не поведение undefined. Приведенная выше цитата из стандарта применима к другой ситуации: структура с без именованных членов . Структура может оказаться непустой, но в то же время без именованных членов, если все члены являются безымянными битовыми полями

struct S {
  int : 5;
};

. В приведенном выше случае поведение не определено. Об этом и говорит приведенная выше цитата.

15
ответ дан 8 December 2019 в 15:59
поделиться