我为什么要这样做呢?
typedef struct Frame_s
{
int x;
int y;
int z;
} Frame_t;另外,如果我想创建一个对象,我应该使用Frame_s还是Frame_t?
发布于 2010-10-02 01:54:37
您将使用Frame_t。
对于typedef,您可以说Frame_t和struct Frame_s是完全相同类型的。
所以这些是等价的句子:
// 1
Frame_t f;
// 2
struct Frame_s f;我将使用:
typedef struct
{
int x;
int y;
int z;
} Frame_t;并且总是像这样声明我的变量:
Frame_t f1, f2, f3;混淆通常来自您在C++代码片段中使用这句话的地方。如果您将C++与该typedef一起使用,则可以使用:
// 1
Frame_t f;
// 2
Frame_s f;但是如果您使用普通的C编译器,那么//2是无效的。
发布于 2010-10-02 01:55:52
要么使用struct Frame_s,要么使用Frame_t。
通常,您这样做是为了使用定义了类型的名称Frame_t,而不必在引用该类型时编写struct。
除了Frame_t比struct Frame_s短之外,没有什么真正的区别。
发布于 2010-10-02 05:18:07
在其他回复中尚未提到的typedef的另一个方面是,它保留标识符,从而可以避免混淆。如果你这样做一个正向声明
typedef struct Frame Frame;您可以避免某些代码可能使用相同名称的Frame,例如变量或函数。
一个非常糟糕的传统例子是POSIX中的"sys/stat.h“:它定义了一个struct stat和一个函数stat
int stat(const char *path, struct stat *buf);https://stackoverflow.com/questions/3841791
复制相似问题