在 C 语言的头文件中声明静态 const 变量是否是一种可接受的做法



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

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

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

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

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

C 文件:

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

H 文件:

extern const char* keys[];

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

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

你拥有static的理由是什么?

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

相关内容

最新更新