我经常在各种教科书中看到这种用于声明结构的语法
typedef struct Foo {
int a;
int b;
int c;
} Foo;
告诉我这种语法与平庸的语法有何不同?
struct Foo {
int a;
int b;
int c;
};
我经常在各种教科书中看到这种用于声明结构的语法
typedef struct Foo {
int a;
int b;
int c;
} Foo;
告诉我这种语法与平庸的语法有何不同?
struct Foo {
int a;
int b;
int c;
};
在 C 中,结构类型和其他类型存在于“不同的命名空间”中。也就是说,在 C 中很可能写成
这里 int 的结构和类型同义词具有相同的名称。它可以工作并编译。并且已经在 ++ - 不存在。因为在 c 中,类型有点在不同的“表”中。
为了使结构类型在“主列表”中可用,您需要编写 typedef。但是后来有人想出了这么漂亮的语法,因为我一直厌倦了写struct。
您的问题被标记为 [C++]。但是第一个版本的声明在 C++ 代码中几乎没有独立的价值。声明的第一个版本经常用在 C 代码中,但不在 C++ 代码中。
声明的第一个版本可以用作交叉编译头文件中的“公分母”,即 在必须用 C 和 C++ 代码编译的头文件中。在这样的声明之后,无论是在 C 代码还是在 C++ 代码中,都可以通过它的“短”名称来引用这个类型
Foo
。在 C++ 中,此类声明(将 typedef 名称声明
Foo
为已存在的具有完全相同名称的类的别名Foo
)正是为了在交叉编译代码中与 C 向后兼容而得到支持。C风格:
没有 typedef 你需要写
struct Foo foo;
顺便说一句,在 C 中,要声明指向 Foo 的指针,您需要使用
struct Foo*
C++ 风格:
事实上,使用平庸的语法,您需要将单词拖到任何地方
struct
,例如当足够非平庸时
“我想是的”(c)维尼