在C中的头文件中声明静态const变量是否可以接受

时间:2013-10-08 13:00:24

标签: c header declare

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

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

或者是否应该在.c文件中声明?

2 个答案:

答案 0 :(得分:2)

我认为可以,但每次在C文件中包含头文件时,都会为新数组分配内存。这意味着您可能会拥有相同阵列的多个副本。

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

c file:

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

h file:

extern const char* keys[];

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

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

获得static的理由是什么?

答案 1 :(得分:0)

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