Typedef Structs

typedefstruct 相结合可以使代码更清晰。例如:

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;
};

因此,对于没有标签名称的 typedefd structbar.h 文件总是必须包含 bar 的整个定义。如果我们使用

typedef struct bar bar;

bar.h 中,可以隐藏 bar 结构的细节。

Typedef