c/c++语言开发共享为什么结构名称应该有typedef?

我已经看到源代码总是有一个结构的typedef并使用相同的地方而不是直接使用结构名称作为“struct sname”等?

这背后的原因是什么? 这样做有什么好处吗?

    它更容易阅读Box b; struct boxtype b;

     typedef struct _entry{ char *name; int id; } Entry, *EntryP; 

    优点:
    在上面的typedefEntryEntryP都是从struct _entry定义的。
    因此,可以使用EntryP firstentry代替struct _entry *firstentry并且在解析时要简单一些。

    注意:它不像结构名称应该是typedefined,但显然它更容易阅读。 此外, Entry * vs EntryP的使用完全取决于用户。

    这是C语言中的奇怪怪癖,结构标记名称存储在不同的命名空间(符号表)中。 C ++语言摆脱了这种行为。 typedef为全局命名空间中的结构类型创建别名。 因此,您不必在结构名称前键入“struct”。

    当他定义这种行为时,不确定Ritchie吸烟了什么。 我猜测早期版本的编译器中的解析器存在某种问题。

    我喜欢在C中这样做:

     // in a "public" header file typedef struct Example Example; // in a "private" header or a source file struct Example { ... }; 

    像这样,我在我的代码中将Example作为一个opaque类型(即,我只能传递指向它), 除了实现其操作的代码,它可以看到它实际定义的内容。 (您可以为opaque类型使用单独的名称,但这没有真正的优势。)

    它只是为了代码的可读性。 typedef只是为数据类型赋予新名称。 您可以按照自己想要的方式以及在任何使用int的位置命名,而不是在每个地方给出int,您可以用您给出的新名称替换它。 同样的事情也适用于结构。

    它是一种信息隐藏forms,在创建不透明类型时非常有用。 请参阅此SO链接以获得稍长的答案。

    C中的非typedefed结构名称要求在使用类型名称的任何地方添加“struct”,因此大多数人使用typedef为不需要始终预先添加struct关键字的类型创建新名称。

    这样做的原因是代码可读性,减少了类型,也可能是清晰度,但是typedef实际上可能会掩盖有关指针类型的信息。

    老实说,需要使用typedef为结构创建新名称是一个遗留问题,而C99没有遵循C ++的主导并删除它是一种遗憾。

    我实际上不使用typedef作为结构。 为什么? 因为无论如何我会使用一些约定这样的s_前缀,以便轻松看到我正在看的是什么类型的变量。

    由于我使用了很多抽象数据类型,我想使用typedef是个好主意,因此用户确实将它用作opaque类型。 但实际上我总是在实现中使用结构。

      以上就是c/c++开发分享为什么结构名称应该有typedef?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545789.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐