简短问题
在C中使用structsenums的typedef是否有合适或首选的方法?
背景
我一直在开发一个代码库,有几个人/公司在开发它,我遇到了typedefs的不同实现。根据Wikipedia他们似乎都有相同的功能。我想我是想弄清楚他们之间是否有微妙的差异或分歧。同样的用法和问题也适用于typedefing anenum

// I tend to use this if I need to create an
// alias outside the defining module.

typedef struct obj obj_t;
struct obj
{
    UINT8 val;
};

// I started to use this format to alias objects
// within the same module (both private and
// public definitons).  This is also how
// several colleagues use them.

typedef struct obj_t
{
    UINT8 val;
}obj_t;

// This is how I now typically format the aliases
// for both public and private definitions.

typedef struct
{
    UINT8 val;
}obj_t;

// I just ran into this one.  While makes sense
// how it works, it wasn't inherently better or
// worse then the formats above. Note the different
// container names.

typedef struct obj_t
{
    UINT8 val;
}obj;

最佳答案

它们基本上都是相同的,因为它们都将obj_t定义为结构的类型别名。
不同的是,当您定义结构的名称(例如struct obj ...)时,您还可以使用struct obj myStructure;如果您想引用它自身内部的结构(例如创建链接列表时),这是必需的如果在实际结构之前执行typedef(如在第一个示例中),那么当然也可以在结构内部使用typedef的名称。

关于c - C语言中正确的typedef语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16540607/

10-12 23:55