在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 有用的情况 - 例如只能使用访问器函数访问的不透明对象 - 最后是:
通常,指针或结构具有可以合理地如果_从不_是类型定义,则直接访问。