为什么不在C中使用typedef作为结构?

时间:2012-09-14 01:16:34

标签: c struct typedef

我正在研究用于ARM低功耗设备的C语言应用程序,我首先要有这段代码

struct state {
    float position;
    int dummy;
};

注意这个结构没有定义一个新类型,我也注意到稍后在代码中这个结构就像这样使用

struct state mystate;

这对我来说很奇怪而且不方便,不灵活,还有一个额外无用的关键字,我可以轻松避免在结果中首先使用typedef

这是一个对于此应用程序的业务逻辑至关重要的结构,并且在源代码中也经常使用。

有一个特殊的原因是不使用typedef结构最终被用作类型?

4 个答案:

答案 0 :(得分:12)

我认为typedef有害。我认为它几乎总是误用。在我看来,它是有用的,只有当底层类型被完全抽象时才有用 - 例如所有操纵都是通过功能。否则,底层类型不是抽象的 - 用户仍然必须知道它是什么,理解代码 - 所有发生的事情都是代码可读性受损,其中类型命名空间没有增益(对于类型)没有得到适当的抽象扩展。

在我看来,几乎所有使用typedef都不了解它带来的问题以及它应该如何使用。

答案 1 :(得分:4)

这里没有提到的细节,来自C标准。

  

6.7.7.3 [...] typedef声明不引入新类型,只引用所指定类型的同义词。

你可以用它来抽象出一些细节,但是当有人走到只允许函数调用的极端时,我想知道他们是如何在size_t处分配内存以及它是unsigned int的泄漏知识类型是必要的。

鉴于它只是一个别名,我也没有使用typedef作为快捷方式的任何问题,例如省略在任何地方都需要的附加关键字。我不喜欢重复的样板代码,并将其隐藏起来会缩短代码。您应该小心谨慎,清晰度和可读性不会受到影响,因此我也更喜欢始终保持名称空间的清洁。我发现这很糟糕:

typedef struct state {
    float position;
    int dummy;
} state;

并且喜欢这样的东西:

typedef struct s_state {
    float position;
    int dummy;
} t_state;

答案 2 :(得分:3)

使用typedef与否是个人偏好。就个人而言,我只使用typedef来表示复杂的指针类型或函数指针。

声明结构时,还要声明一个类型,即struct structName。所有typedef都允许您在此场景中取出定义的struct部分,而不是必需的。这与低功耗设备无关。

答案 3 :(得分:3)

这主要是为了清晰起见。实际上,大多数人都知道,如果你必须使用struct关键字,你应该自己操纵内部数据。当结构类型为typedef时,它是隐藏实际类型,操作应该由函数完成。这是一个并不总是遵循的约定,其他的只是留下struct关键字以区别于不透明类型。