我已经看到源代码总是有一个结构的typedef并使用相同的地方而不是直接使用结构名称作为“struct sname”等?
这背后的原因是什么? 这样做有什么好处吗?
它更容易阅读Box b;
比struct boxtype b;
typedef struct _entry{ char *name; int id; } Entry, *EntryP;
优点:
在上面的typedef
, Entry
和EntryP
都是从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