struct t_empty {
};
Это, кажется, компилирует правильно в C++, но не C. (по крайней мере, с TI 28xx компилятор дес. ложки, где это испускает ошибку, "ожидал объявление"), это упоминается где-нибудь в стандартах C, или мой компилятор повреждается?
Пустая структура - это синтаксическая ошибка в C. Грамматика языка C написана так, что она запрещает пустые структуры. Т.е. вы не найдете его явного указания в стандарте, это просто следует из грамматики.
В C ++ действительно допустимы пустые классы.
P.S.Обратите внимание, что часто вы можете увидеть цитату из стандарта C, в которой говорится «Если список-декларации-структуры не содержит именованных членов, поведение не определено». , которая представлена как часть документа это запрещает пустые структуры. На самом деле, пустые структуры снова запрещены грамматикой. Таким образом, буквально пустая структура (как в вашем вопросе) - это синтаксическая ошибка, а не поведение undefined. Приведенная выше цитата из стандарта применима к другой ситуации: структура с без именованных членов . Структура может оказаться непустой, но в то же время без именованных членов, если все члены являются безымянными битовыми полями
struct S {
int : 5;
};
. В приведенном выше случае поведение не определено. Об этом и говорит приведенная выше цитата.