关于 c 语言结构体的命名问题

2015-12-19 09:54:28 +08:00
 luohaha
在为自定义的 c 语言结构体命名时,能不能使用_t 后缀。我了解到有种观点是说,_t 后缀是 posix 的保留命名格式,不该使用。但另一种观点是,为了保持一致性,应该使用_t 后缀。有点迷惑。。
4599 次点击
所在节点    Linux
6 条回复
pathletboy
2015-12-19 11:43:29 +08:00
答案是随便,只要你一个项目 /一个团队中,命名风格保持一致就可以。
luohaha
2015-12-19 12:14:49 +08:00
@pathletboy 应该是这样。
halibut735
2015-12-20 14:15:30 +08:00
我一直以为_t 是 type 的意思。。
FrankHB
2015-12-20 14:37:54 +08:00
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 的保留标识符限制仍然类似;除此以外不踩到宏的坑就能无视。
FrankHB
2015-12-20 14:44:08 +08:00
因为基本上_t 都是文件作用域外部名称,所以你临时性地在块内 typedef 一下_t 的用法是不受限制的。不过排除了最有用的用法,似乎也没多大卵用就是了……
@halibut735 _t 约定俗成也就是 type 的意思。
不过最近似乎有越用越集中的趋势,像 ISO C++ 14 已经到处后缀_t 表示 typename *::type 了……甚至还有直接当 alias template 的: https://github.com/ericniebler/range-v3/blob/4ae2b5bd7b36ce2281f34abb40dab0e88f81e519/include/meta/meta.hpp#L147
cortexm3
2015-12-20 20:32:40 +08:00
这东西看公司的编码规范了吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244611

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX