Typedef Structs
将 typedef
与 struct
相结合可以使代码更清晰。例如:
typedef struct
{
int x, y;
} Point;
而不是:
struct Point
{
int x, y;
};
可以声明为:
Point point;
代替:
struct Point point;
更好的是使用以下内容
typedef struct Point Point;
struct Point
{
int x, y;
};
利用 point
的两种可能定义。如果你首先学习 C++,这样的声明是最方便的,如果名称不明确,你可以省略 struct
关键字。
结构的 typedef
名称可能与程序其他部分的其他标识符冲突。有些人认为这是一个缺点,但对于大多数拥有 struct
和另一个标识符的人来说,这是非常令人不安的。臭名昭着的是例如 POSIX’stat
int stat(const char *pathname, struct stat *buf);
你在哪里看到一个函数 stat
,它有一个参数是 struct stat
。
typedef
’d 没有标记名称的结构总是强加整个 struct
声明对使用它的代码是可见的。然后必须将整个 struct
声明放在头文件中。
考虑:
#include "bar.h"
struct foo
{
bar *aBar;
};
因此,对于没有标签名称的 typedef
d struct
,bar.h
文件总是必须包含 bar
的整个定义。如果我们使用
typedef struct bar bar;
在 bar.h
中,可以隐藏 bar
结构的细节。
见 Typedef