Сделать сбой веб-пакета при неопределенном именованном импорте

void не имеет размера. В C и C ++ выражение sizeof (void) недействительно.

В C, цитируя N1570 6.5.3.4, пункт 1:

Оператор sizeof не должен применяться к выражению, имеющему тип функции или неполному типу , к имени в скобках такого типа или выражению, которое обозначает член битового поля.

blockquote>

(N1570 - проект стандарта ISO C 2011 года.)

void является неполным типом. Этот абзац является ограничением , что означает, что любой соответствующий C-компилятор должен диагностировать любое его нарушение. (Диагностическое сообщение может быть предупреждением, не несущественным.)

Стандарт C ++ 11 имеет очень похожую формулировку. Оба выпуска были опубликованы после того, как этот вопрос был задан, но правила восходят к стандарту ANSI C 1989 года и самым ранним стандартам C ++. На самом деле правило, что void является неполным типом, к которому sizeof не может применяться, возвращается точно так же, как введение void в язык.

gcc имеет extension , который рассматривает sizeof (void) как 1. gcc по умолчанию не является совместимым компилятором C, поэтому в режиме по умолчанию он не предупреждает о sizeof (void). Расширения, подобные этому, разрешены даже для полностью совместимых компиляторов C, но диагностика по-прежнему требуется.

1
задан oligofren 19 March 2019 в 09:26
поделиться