пустые определения структуры недопустимы в C, но не в C ++? - PullRequest
6 голосов
/ 17 мая 2010
struct t_empty {
};

Кажется, это правильно компилируется в C ++, но не в C. (по крайней мере, с помощью DSP-компилятора TI 28xx, где он выдает ошибку «ожидается объявление»). Упоминается ли это где-то в стандартах C, или мой компилятор поврежден?

1 Ответ

15 голосов
/ 17 мая 2010

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

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

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

struct S {
  int : 5;
};

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...