Я только что обнаружил, что и gcc
, и clang
принимают следующий код:
typedef int blah;
struct s { char blah; };
Однако они отклоняют это, поскольку имя типа используется в качестве идентификатора:
typedef int blah;
char blah;
Означает ли это, что имя typedef не видно внутри определения структуры? Нет, потому что это работает как в g cc, так и в clang:
typedef int blah;
struct s { blah blah; }
Я смотрю в стандарте C99 и не могу найти ничего, что объясняет, почему имя typedef может использоваться в качестве имени члена структуры, но не переменной в той же области.
Может кто-нибудь объяснить, почему это так? Ссылка на любой применимый стандарт приветствуется.