为什么结构化类型由结构标记而不是类型名称引用



在Linux内核中,结构化类型是这样定义的:

typedef struct _TAG_ { ... };

然后在这样的例程中使用:

struct _TAG_ structured_entity;   
struct _TAG_ *pointer_to_structured_entity;
void function(struct _TAG_ *arg, ...);

为什么不这样:

typedef struct _TAG_ { ... } _typename_; 

然后:

_typename_ structured_entity;   
_typename_ *pointer_to_structured_entity;
void function(_typename_ *arg, ...);

这样做的技术必要性是什么? 或者这只是传统/风格/魔术?

Linux 内核

编码风格 - 在内核附带的 kernel.org 和文档目录中 - 不鼓励对结构使用 typedefs:

第5章 类型定义请不要使用"vps_t"之类的词。将 typedef 用于结构和指针是一个_错误_。当您看到    vps_t a;在源中,这是什么意思?相反,如果它说    结构virtual_container *a;你实际上可以分辨出"a"是什么。

该文档继续列出了作者认为 typedefs 有用的情况 - 例如只能使用访问器函数访问的不透明对象 - 最后是:

通常,指针或结构具有可以合理地如果_从不_是类型定义,则直接访问。

最新更新