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