Стандарт ISO C11 (у меня есть доступ только к черновой версии, n1570.pdf) утверждает в 6.2.1.8 (в стандарте C99 такого параграфа нет):
В качестве особого случая считается, что имя типа (которое не является объявлением идентификатора) имеет область видимости, которая начинается сразу после того места в имени типа, где мог бы появиться пропущенный идентификатор, если бы он не был пропущен.
Я ищу какое-либо объяснение следующего:
1) Название раздела (6.2.1) - «Области идентификаторов». Формулировка этого абзаца мне непонятна: является ли «область видимости имени типа» своего рода областью, подобной, например, область блока, область действия файла и т. д.? Или это область действия самого имени типа (в этом случае возникает вопрос, как объект без имени может иметь область действия и каково возможное использование такой области).
2) Какое значение имеет это определение? Более конкретно, если бы это было изменено, чтобы сказать, что область видимости имени типа начинается сразу после завершения соответствующего имени типа, что это повлияет? Единственные токены, которые могут следовать за пропущенным идентификатором в абстрактном деклараторе (= имя типа), - это несколько круглых скобок и список имен параметров или размеров массива (с выражениями внутри), ни один из которых не может ссылаться на рассматриваемое имя типа, поскольку существует нет идентификатора для ссылки. Почему бы не дождаться завершения декларатора?
struct xyz { ... };
, которое является именем типа (struct xyz
), которое не является объявлением идентификатора? Считается, что область видимости находится от точки с запятой до конца охватывающей области (файл, если он появляется вне какой-либо функции; блок, если он появляется внутри функции). - person Jonathan Leffler   schedule 11.03.2014xyz
в этом случае начинается прямо перед{
(или сразу послеxyz
во втором случае), тогда как рассматриваемая формулировка относится к области, которая будет начинаться после `} '. Приведенный ниже ответ, относящийся к DR341, - это то, что я искал. Спасибо за помощь! - person alexsh   schedule 11.03.2014