技术解析

关于 c 语言结构体的命名问题
0
2021-07-06 04:12:35
idczone
在为自定义的 c 语言结构体命名时,能不能使用_t 后缀。我了解到有种观点是说,_t 后缀是 posix 的保留命名格式,不该使用。但另一种观点是,为了保持一致性,应该使用_t 后缀。有点迷惑。。
答案是随便,只要你一个项目 /一个团队中,命名风格保持一致就可以。

应该是这样。

我一直以为_t 是 type 的意思。。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html
包含任意 POSIX 头(文件)的翻译单元的文件作用域内保留_t 后缀作为外部链接的标识符(给 POSIX 标准或实现),所以你要 strict conforming to POSIX 自然不能随便用,否则一旦实现提供了扩展或者更新了使用的 POSIX 版本就可能冲突,慢慢重构去吧……
但如果你的项目本身就是在实现 POSIX 或者 ISO C ,自行添加扩展当然是允许的(兼容性问题自负),如:
https://www.cygwin.com/ml/cygwin/2009-08/msg00376.html
ISO C 没有保留后缀只是提供了一些_t 的名称,所以不管 POSIX 就无所谓。
题外话, C++的成员因为类和非全局命名空间都有单独的作用域而不是 C 那种名称空间(name space) 来区分,所以不受类似的限制,只是全局命名空间以及 ISO C 的保留标识符限制仍然类似;除此以外不踩到宏的坑就能无视。

因为基本上_t 都是文件作用域外部名称,所以你临时性地在块内 typedef 一下_t 的用法是不受限制的。不过排除了最有用的用法,似乎也没多大卵用就是了……
_t 约定俗成也就是 type 的意思。
不过最近似乎有越用越集中的趋势,像 ISO C++ 14 已经到处后缀_t 表示 typename *::type 了……甚至还有直接当 alias template 的: https://github.com/ericniebler/range-v3/blob/4ae2b5bd7b36ce2281f34abb40dab0e88f81e519/include/meta/meta.hpp#L147

这东西看公司的编码规范了吧

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服