Следующее определение MyStruct (тег MyStruct) и определение типа MyStruct кажется вполне компилируемым с помощью gcc (по крайней мере, 4.6.2) и g ++.
typedef struct MyStruct {
int a;
int b;
} MyStruct;
У меня вопрос: является ли использование имени тега, совпадающего с именем типа, каким-либо образом подверженным ошибкам (в C и / или C ++) или плохим стилем?
Согласно http: //www.eetimes .com / обсуждение / программирование-указатели / 4024450 / Tag-vs-Type-Names это не так:
Я никогда не понимал, почему они используют разные имена для тега и typedef, когда одно имя достаточно нормально:
typedef struct tree_node tree_node;
Но часто я видел код в стиле:
typedef struct tagMyStruct {...} MyStruct;
typedef struct _MyStruct {... } MyStruct;
В каждом случае кто-то в какой-то мере пытался сделать имя тега отличным от имени типа. Есть ли за этим какие-то практические причины?
Примечание: я использую компилятор C ++, но я хотел бы, чтобы C был совместим с этими определениями (я знаю, что это плохой стиль для C ++). Для обеспечения удобства использования некоторых инструментов отладки мне нужно, чтобы все имена тегов были значимыми (а не автоматически сгенерированные теги __unknown_something в случае безымянных структур, которые вы можете, например, увидеть в представлении классов Visual Studio).
Та же проблема / вопрос относится к объединениям и перечислениям.