V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
luohaha
V2EX  ›  Linux

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

  •  
  •   luohaha · 2015-12-19 09:54:28 +08:00 · 4578 次点击
    这是一个创建于 3022 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在为自定义的 c 语言结构体命名时,能不能使用_t 后缀。我了解到有种观点是说,_t 后缀是 posix 的保留命名格式,不该使用。但另一种观点是,为了保持一致性,应该使用_t 后缀。有点迷惑。。
    6 条回复    2015-12-20 20:32:40 +08:00
    pathletboy
        1
    pathletboy  
       2015-12-19 11:43:29 +08:00
    答案是随便,只要你一个项目 /一个团队中,命名风格保持一致就可以。
    luohaha
        2
    luohaha  
    OP
       2015-12-19 12:14:49 +08:00
    @pathletboy 应该是这样。
    halibut735
        3
    halibut735  
       2015-12-20 14:15:30 +08:00
    我一直以为_t 是 type 的意思。。
    FrankHB
        4
    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
        5
    FrankHB  
       2015-12-20 14:44:08 +08:00   ❤️ 1
    因为基本上_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
        6
    cortexm3  
       2015-12-20 20:32:40 +08:00
    这东西看公司的编码规范了吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3328 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:25 · PVG 19:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.