Разница между:
struct Name {};
И
typedef struct Name {} Name;
Это то, что в C вам нужно использовать:
struct Name instance_name;
С первым, тогда как со вторым вы можете сделать:
Name instance_name;
В C ++ нет необходимости повторять ключевое слово struct
в любом случае. Обратите внимание, что ваш пример, в котором вы создаете typedef без имени (то есть typedef struct Name{};
), является нестандартным AFAIK (если вы используете ключевое слово typedef
, то вам нужно предоставить псевдоним, для которого нужно ввести typedef это имя).
Что касается последнего варианта:
typedef struct { /* ... */ } Name;
Приведенный выше код создает безымянную структуру с псевдонимом Name. Вы бы использовали такую структуру точно так же, как и с typedef struct Name { /* ... */ } Name;
, однако компиляторы часто выдают имя структуры (не псевдоним), и поэтому вы можете получить более качественные сообщения об ошибках, в которых используется структура, если вы дадите ей имя и typedef, в отличие от typedef'а анонимной структуры.