可能重复:
Is the typedef-name optional in a typedef declaration?
我在Visual Studio 2008上看到了这个:
typedef enum testfoo
{
enum1,
enum2,
enum3
};
通常以这种方式使用typedef的C风格方式需要一个额外的部分(名称):
typedef enum testfoo
{
enum1,
enum2,
enum3
} testfoo_name;
前一个例子在做什么?奇怪的是它编译,但不确定它实际定义的是什么。
答案 0 :(得分:0)
有区别。第二个为enum
创建了一个别名,但第一个没有。第一个示例中的typedef
实际上并没有做任何事情。这给了我GCC的警告,所以我怀疑你可以把它拿出来。
在C中,typedef
结构和枚举是常见的,以避免使用struct或enum名称进行实例化。例如:
struct A {};
struct A a;
为了缩短这一点,typedef
可以解决问题:
typedef struct {} A;
这在C ++中不再是必要的,所以我得出了他对这个概念的误解的假设。或许作者忘了给它起个名字......
使用类或结构时会发生同样的事情:
typedef struct A {}; // simply a class-declaration, generates a warning
答案 1 :(得分:0)
第一个例子只是一个无用的typedef
。我认为它在语法上是合法的,但它没有提供类型定义的名称,所以它等同于:
enum testfoo { enum1, enum2, enum3 );
在C中,这会创建一个名为enum testfoo
的类型;通常(但不是必须)使用typedef来允许将类型称为testfoo
。
在C ++中,即使没有typedef,该类型也可以称为enum testfoo
或testfoo
。
我怀疑有人对这些规则感到困惑,看到该类型可以被引用(在C ++中)为testfoo
,并错误地认为这是因为typedef
。