【问题标题】:Is it an acceptable practice to declare a static const variable in a header file in C在 C 的头文件中声明静态 const 变量是否可以接受
【发布时间】:2013-10-08 13:00:24
【问题描述】:

我有一个数组static const char* keys[]。我可以将头文件中的数组声明为

static const Char* keys[] = {
   "id",
   "ip", // a growing array.
}

还是应始终在.c 文件中进行声明?

【问题讨论】:

  • 可能在头文件本身的一小段代码中使用。
  • 阅读这两个cmets:comment-1comment-2
  • 那么如果我想在另一个文件中使用它,如何在这里给一个指向静态数组的指针呢?

标签: c header declare


【解决方案1】:

我想这会工作,但是每次将头文件包含在 C 文件中时,都会为新数组分配内存。这意味着您可能会拥有同一个数组的多个副本。

我认为你想要做的通常方法是:

c 文件:

const char* keys[] = {
   "id",
   "ip", // a growing array.
}

h 文件:

extern const char* keys[];

这样你只有一个内存分配,并且可以在其他模块中引用这个位置。

另一种方法是创建数组 static(h 文件中没有任何内容)并编写 get 函数来访问字符串。

您拥有static 的理由是什么?

【讨论】:

    【解决方案2】:

    实际上它是您问题中的对象定义,声明不会实例化数据结构/类等。
    因此,如果您将此对象定义移动到 *.c 文件,那么您将无法从其他来源访问它。这是一种静态影响。猜猜,这不是你需要的。
    但是,如果您删除 static 并将定义放入 *.c 并将声明添加到 *.h 文件,那么您会为每个头文件的包含保存一个内存,用于您的对象大小(每个包含将指向一个 const 结构)。 现在,在您的情况下,每个包含都会以对象的大小增加二进制文件的大小。

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2010-09-10
      • 2013-08-04
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多