【问题标题】:Static const structs in CC 中的静态 const 结构
【发布时间】:2015-06-07 06:13:16
【问题描述】:

我们正在启动一个相当大的项目,其中涉及不同语言的部分。我们决定在编译时将某个部分从JSON 翻译成必要的C structs(以及其他系统部分的其他结构)。

结构体在.h 中定义,声明类似于const static struct MCSCommandOptionsMessage mcs_command_message_list[] =,然后是所需格式的参数列表。

问题是:带有结构声明的自动生成文件应该是.h,还是只为这个结构提供.c?为什么?

【问题讨论】:

  • 这需要包含在多少个文件中?如果不止一个,则不能在头文件中声明,因为至少链接器会抱怨。

标签: c struct constants


【解决方案1】:

两者都是可能的,在 .h 中声明或在唯一一个可以访问该结构的 .c 文件中声明。如果结构定义了类似接口的东西和/或您生成多个结构,如果将它们放在 .h 文件中会很好。它将定义一个合同。如果存在多个结构实例,则必须将结构定义放在 .h 文件中。

如果您想表达 Isolation 并强调结构是私有的,您可以在 .c 文件中定义它。

【讨论】:

    【解决方案2】:

    通常 .h 文件用作“包含”文件而不是直接编译,这是因为它们中的代码不应像定义接口那样改变太多。请记住,如果结构中有任何更改并且它们在 .h 文件中,那么您必须重新编译使用该结构的任何内容。如果结构在 .c 文件中,它会在每次编译时重新编译。

    如果结构在 .h 文件中,您可以在不同的 .c 文件中轻松使用它

    【讨论】:

    • 在 C 中,关键字 static 表示私有。没有不同的 .c 文件可以访问该结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多